<?php session_start();
include("../config.php");
require_once("cLogin.php");
require_once("cResultado.php");
require_once("PHPLogger.php");
require_once("MisPuntos.php");
$LOGGER = new PHPLogger(LOGGER_PATH, LOGGER_LEVEL);
$LOGIN = unserialize($_SESSION['loginClass']);
class BykomCliente{

	function getResultado($mysqli) {
		if ($rs = $mysqli->store_result()) {
       		if($rs->num_rows >0) {
    			$i=0;
				while ($finfo = $rs->fetch_field()) {
              	$campos[$finfo->name]=$i;
              	$i++;
				}
				while ($row = $rs->fetch_row()) $vec[] = $row;
				$rs->free_result();
				return new cResultado($campos, $vec);
       		}
			$mysqli->close();
		}
		return new cResultado();
	}
	/**********************************************************************/
	function LoginInitialValidation($loginClass){
		global $LOGGER;
		$LOGGER->addLine('DEBUG', 'Login -> Initial Validation Start');
		//REALIZO CONSULTA INICIAL AL SERVER
		$privateKeyCode = '1@%(&0A';
		$publicKeyCode = PUBLICKEYCODE;
		$resultado = BykomCliente::LoginDataActivation($privateKeyCode.$publicKeyCode);
		if (($resultado->cantidad() == 0)||(!$resultado->campo('data', 0))){
			//El codigo de llave del cliente es invalido o no existe
			$LOGGER->addLine('INFO', 'El codigo de llave del cliente es invalido o no existe');
			$loginClass->errorCode = 19;
			return $loginClass;
		}
		//Verificacion de admin corriendo
		$LOGGER->addLine('DEBUG', "TimeMaster:" . $resultado->campo('timexMaster', 0) . " minutos");
		if (!$resultado->campo('timexMaster', 0)){
			$LOGGER->addLine('INFO', 'El servidor ADMIN no se encuentra encendido. First time o se intento sobrescribir el valor!');
			$loginClass->errorCode = 25;
			return $loginClass;
		}
		$LOGGER->addLine('DEBUG', "Diferencia:" .$resultado->campo('dif', 0) . " minutos");
		if ($resultado->campo('dif', 0) > 120) {
			$LOGGER->addLine('INFO', 'El servidor ADMIN no se encuentra encendido!. Diferencia mayor a 120 min');
			$loginClass->errorCode = 25;
			return $loginClass;
		}
		$sRestricciones = $resultado->campo("restricciones",0);
		$LOGGER->addLine('INFO', "Restricciones: " .$sRestricciones);
		$vRestricciones = restricciones($sRestricciones);//funcion en utils.php
		foreach($vRestricciones as $key=>$value){
			$loginClass->$key = $value;
		}
		//INICIALIZO LAS VARIABLES DE DATA:
		$data = str_replace("|",",",$resultado->campo('data', 0));
		$dataArray = split(",",$data);
		$TI = substr($dataArray[0],3); //Tipo de cuenta
		$CC = substr($dataArray[1],3); //Cantidad de cuentas "PRO" concurrentes
		$HK = substr($dataArray[2],3); //Key de activacion del servidor
		$VE = substr($dataArray[3],3); //Fecha de vencimiento de la key del servidor
		$HA = substr($dataArray[4],3); //Fecha actual del servidor para comprovacion
		$VS = substr($dataArray[5],3); //Estado de vencimiento: 1=llave vencida, 0=llave OK
		$MO = substr($dataArray[6],3); //Acceso desde celular: 0=NO, 1=SI
		$_SESSION['cuentaspro'] = $CC;
		//(1) Validacion del numero de llave
		//El codigo de llave del cliente no coincide con el del servidor
		if ($publicKeyCode!=$HK){
			$LOGGER->addLine('ERROR', 'El codigo de llave del cliente no coincide con el del servidor');
			$loginClass->errorCode = 20;
			return $loginClass;
		}
		//(2) Validacion del vencimiento de la llave
		//La llave del producto se ha vencido. Contactese con su proveedor para mas detalles.
		if ($VS == 1){
			$LOGGER->addLine('ERROR', 'La llave del producto se ha vencido.');
			$loginClass->errorCode = 21;
			return $loginClass;
		}
		//(3) VALIDACIONES GENERALES Y COMPLETO DATOS DE $loginClass.
		$loginClass = BykomCliente::LoginAbstracto($loginClass);

		//(4) Validacion tipo de cuenta.
		if (($TI==0)&&($loginClass->objetivoDB > 1)){
			$loginClass->errorCode = 22;
			$LOGGER->addLine('ERROR', 'El tipo de cuenta con la que intenta ingresar no es valido.');
			return $loginClass;
		}else if($TI==1) //obligo a que la cuenta se comporte como NORMAL
				$loginClass->isPRO = 0;

		if ($loginClass->errorCode == 0) {	//SI NO EXISTEN ERRORES HASTA EL MOMENTO
			//(5) Validacion de cantidad de alias concurrentes por cuenta (la cuenta tb suma).
			//SOLO SE VALIDA SI LA CUENTA NO ES DEL TIPO DEALER.
			if ($loginClass->objetivo!=5){
				$ccc = BykomCliente::CountCuentasConcurrentes($loginClass->cuentaFk);
				if ($ccc<0){ //hubo un error
					$loginClass->errorCode = abs($ccc);
       				return $loginClass;
				}
     			if($loginClass->limitConnect <= $ccc){
					$loginClass->errorCode = 23;
					$LOGGER->addLine('ERROR', 'Se ha alcanzado el limite en la cantidad de cuentas/alias que estan logueadas en este momento.');
       				return $loginClass;
				}
			}

			//(6) Validacion de cantidad de cuentas PRO concurrentes por servidor.
//			$ccPc = BykomCliente::CountCuentasPROConcurrentes();
//			if ($ccPc<0){ //hubo un error
//				$loginClass->errorCode = abs($ccPc);
//       			return $loginClass;
//			}
//
//     		if($CC <= $ccPc){ //obligo a que la cuenta se comporte como NORMAL
//				$loginClass->isPRO = 0;
//			}

		}
		$loginClass->generarPermisos();

		if ($MO == NULL || $MO != 1) {
			$loginClass->accessPhoneGeneral = 0;
		} else {
			$loginClass->accessPhoneGeneral = 1;
		}

/*		echo("<script language='JavaScript' type='text/javascript'>");
		echo("alert('" . $SQL . "');");
		echo("</script>");*/

		return $loginClass;
	}

	/**********************************************************************/
	function CountCuentasConcurrentes($cuenta) { //retorna la cantidad de cuentas/alias que hay logueadas en el momento de la consulta
			$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     		if (mysqli_connect_errno())
       			return  -1; //codigo de error en negativo
			$SQL = " Select count(UL.`logueado`) as cantidad ".
				   " from `userlogued` UL ".
				   " where UL.`logueado` = 1 AND ( ".
				   " UL.`cuentaFk` = ".$cuenta." OR ".
				   "(".
				   " (UL.`objetivo` = 4) AND".
      			   " (UL.`cuentaFk` IN (Select AL.id from aliases AL where AL.`cuentaFk`=".$cuenta.")) ".
				   "))";

			if (!$mysqli->real_query($SQL)){
				$LOGGER->addLine('ERROR',"FUNCION: 'CountCuentasConcurrentes' " . $mysqli->error.' CONSULTA: '.$SQL );
       			return  -2; //codigo de error en negativo
			}

     	   	$resultado = BykomCliente::getResultado($mysqli);
		    return ($resultado->campo('cantidad', 0));
	}

	/**********************************************************************/
	function CountCuentasPROConcurrentes() { //retorna la cantidad de cuentas PRO que hay logueadas en el servidor en el momento de la consulta
			global $LOGGER;
			$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     		if (mysqli_connect_errno())
       			return  -1; //codigo de error en negativo
			$SQL = "SELECT count(*) as cantidad ".
				   "FROM `userlogued` UL ".
			       "WHERE UL.`logueado` = 1 AND ".
				   "( ";
			//PARA OBJETIVOS FIJO Y MOVIL
		    $SQL .=" ( ".
                   "  ((UL.`objetivo` = 1)or(UL.`objetivo` = 2))  and ".
                   "  (exists (select AM.`ORDER_ID` ".
                   "           from `abmacodigos` AM ".
                   "           where AM.`ORDER_ID` = UL.`cuentaFk` and ".
                   "                 AM.`OBJETIVO` = UL.`objetivo` and ".
                   "                 AM.`CLIENTE_PRO` = 1)) ".
                   " ) OR ";
			//PARA OBJETIVO FLOTA
            $SQL .=" ( ".
                   "  (UL.`objetivo` = 3) and ".
                   "  (exists (select TL.`ORDER_ID` ".
                   "           from `tlmapersonas` TL ".
                   "           where TL.`ORDER_ID` = UL.`cuentaFk` and ".
                   "                 TL.`CLIENTE_PRO` = 1)) ".
                   " ) OR ";
			//PARA OBJETIVO ALIAS
       		$SQL .=" ( ".
        		   "  (UL.`objetivo` = 4) and ".
        		   "  (exists (select AL.`id` ".
                   "           from `aliases` AL ".
                   "           where AL.`id` = UL.`cuentaFk` and ".
                   "                (( ".
                   "                  ((AL.`esFlota` = 1) AND ".
                   "                   (exists (select TLa.`ORDER_ID` ".
                   "                            from `tlmapersonas` TLa ".
                   "                            where TLa.`ORDER_ID` = AL.`cuentaFk` and ".
                   "                                  TLa.`CLIENTE_PRO` = 1) ".
                   "                            )) ".
                   "                 ) OR ".
                   "                 ( ".
                   "                  ((AL.`esFlota` = 0) AND ".
                   "                   (exists (select AMa.`ORDER_ID` ".
                   "                            from `abmacodigos` AMa ".
                   "                            where AMa.`ORDER_ID` = AL.`cuentaFk` and ".
                   "                                  AMa.`CLIENTE_PRO` = 1) ".
                   "                            ))".
                   "                 ))".
                   "          ) ".
                   "  ) ".
                   " ) OR";
			//PARA OBJETIVO DEALER (siempre es PRO)
       		$SQL .=" ( ".
        		   "  (UL.`objetivo` = 5) ".
				   " ) ".
       			   ") ";
			if (!$mysqli->real_query($SQL)){
			 	$LOGGER->addLine('ERROR',"FUNCION: 'CountCuentasPROConcurrentes' " . $mysqli->error.' CONSULTA: '.$SQL );
				return  -2; //codigo de error en negativo
			}

     	   	$resultado = BykomCliente::getResultado($mysqli);
		    return ($resultado->campo('cantidad', 0));
	}

	/**********************************************************************/
	function LoginAbstracto($loginClass) {
		if ($loginClass->objetivo == 4) {
   			$loginClass = BykomCliente::LoginAlias($loginClass);

		} else if ($loginClass->objetivo == 1 || $loginClass->objetivo == 2) {
   			$loginClass = BykomCliente::LoginCuenta($loginClass);

		} else if ($loginClass->objetivo == 3) {
   			$loginClass = BykomCliente::LoginFlota($loginClass);
   		} else if ($loginClass->objetivo == 5) {
			$loginClass = BykomCliente::LoginDealer($loginClass);
		}
   		$return = BykomCliente::ProcesarLogin($loginClass);
		$return->label = $return->getLabelLogin();
		$return->isBykom = 0;
		return $return;
	}

	/**********************************************************************/

	function LoginAlias($loginClass){
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR','FUNCION: "LoginAlias" '. mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
		$LOGGER->addLine('INFO', 'Login Alias -> "'.$loginClassActual->alias.'"');

		$SQL = "SELECT a.cuentaFK as cuentaFk,a.esFlota as esFlota,a.id as id, a.clave as clave, a.mail as mail, ";
		$SQL.= "CAST( ";
		$SQL.= "if(a.esFlota = '5',cast(d.login as char), ";
		$SQL.= "	if(a.esFlota = '1', ";
		$SQL.= "		CONCAT_WS(' - ', cast(rc.codigoAlfa as char), cast(abma2.ID_CL as char)), ";
		$SQL.= "		if(a.esFlota = '2', ";
		$SQL.= "			CONCAT_WS(' - ', cast(rc.codigoAlfa as char), cast(abma2.ID_CL as char)), ";
		$SQL.= "			cast(tlma2.USER_WEB as char) ";
        $SQL.= " 		)";
        $SQL.= "	)";
        $SQL.= " ) as char) as descripcion , a.permisoMonitor,
				a.permisoComandosGPRS,
				a.permisoComandosSMS,
				a.permisoVerReportes,
				a.permisoVerPuntos,
				a.permisoVerZonas,
				a.permisoVerContactos,
				a.permisoVerLogistica,
				a.permisoModificarPuntos,
				a.permisoModificarZonas,
				a.permisoModificarContactos,
				a.permisoModificarLogistica,
				a.permisoMobile,
				a.permisoAccedeSetup,
				a.permisoAccedeEventos,
				a.permisoAccedeUsuarios,
				a.permisoAccedeFacturas,
				a.permisoAccedeZonas,
				a.permisoAccedeContactos,
				a.permisoAccedeHorarios,
				a.habilitarFijo,
				a.habilitarMovil,
				a.habilitarFlota,
				a.habilitarRC,
				a.habilitarRCFijo,
				a.permisoVerRutas,
				a.permisoModificarRutas,
				a.permisoVerAgendaGral,
				a.permisoModificaAgendaGral,
				a.habilitado as habilitado,
				abma2.LOCKSTAT as lockStat,
				abma2.LOCKDATE as lockDate,
				now() as fechaActual ";
		$SQL.= "FROM aliases a ";
		$SQL.= "LEFT JOIN abmacodigos abma2 on (a.cuentaFk = abma2.ORDER_ID) ";
		$SQL.= "LEFT JOIN rcmacodigos rc on (rc.ORDER_ID = abma2.ID_RC) ";
		$SQL.= "LEFT JOIN tlmapersonas tlma2 on (a.cuentaFk = tlma2.ORDER_ID) ";
		$SQL.= "LEFT JOIN dealer d on d.id = a.cuentaFk ";
		$SQL.= "WHERE a.alias ='". trim($loginClassActual->alias) . "'";

	  	if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginAlias' " . $mysqli->error.' CONSULTA: '.$SQL );
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 5;
       		return  $loginClassActual;
     	}
     	if ($resultado->campo('habilitado', 0) == 0) {
     		$loginClassActual->errorCode = 53;
       		return  $loginClassActual;
     	}

		if($resultado->campo('esFlota', 0) != 1){
	     	$f1 = $resultado->campo('lockDate', 0);
	     	$f2 = $resultado->campo('fechaActual', 0);
	     	if($resultado->campo('lockStat', 0) == 1 && ( $f1 != null && !BykomCliente::fechaAnteriorA($f2,$f1) ) ){
	     		$loginClassActual->errorCode = 52;
	       		return  $loginClassActual;
	     	}
     	}

     	$loginClassActual->cuentaFk 	= $resultado->campo('cuentaFk', 0);
		$loginClassActual->esFlota 		= $resultado->campo('esFlota', 0);
		$loginClassActual->tablaId 		= $resultado->campo('id', 0);
		$loginClassActual->passwordDB 	= $resultado->campo('clave', 0);
		$loginClassActual->labelCuenta 	= $resultado->campo('descripcion', 0);
     	$loginClassActual->mail 		= $resultado->campo('mail', 0);
     	$loginClassActual->objetivo 	= 4;
     	$loginClassActual->objetivoDB	= $resultado->campo('esFlota', 0);;
     	/////PERMISOS para el Alias///////
     	$iMonitorea 	= $resultado->campo('permisoMonitor', 0);
		$iComandosGPRS 	= $resultado->campo('permisoComandosGPRS', 0);
		$iComandosSMS 	= $resultado->campo('permisoComandosSMS', 0);
		$iVerReportes 	= $resultado->campo('permisoVerReportes', 0);
		$iVerPuntos 	= $resultado->campo('permisoVerPuntos', 0);
		$iVerZonas 		= $resultado->campo('permisoVerZonas', 0);
		$iVerContactos 	= $resultado->campo('permisoVerContactos', 0);
		$iVerLogistica 	= $resultado->campo('permisoVerLogistica', 0);
     	$iModificaPuntos= $resultado->campo('permisoModificarPuntos', 0);
     	$iModificaZonas	= $resultado->campo('permisoModificarZonas', 0);
		$iModificaContactos	= $resultado->campo('permisoModificarContactos', 0);
		$iModificarLogistica= $resultado->campo('permisoModificarLogistica', 0);
		$iAccessMovil	= $resultado->campo('permisoMobile', 0);
		$iAccedeSetup	= $resultado->campo('permisoAccedeSetup', 0);
		$iAccedeEventos = $resultado->campo('permisoAccedeEventos', 0);
		$iAccedeUsuario = $resultado->campo('permisoAccedeUsuarios', 0);
     	$iAccedeFacturas= $resultado->campo('permisoAccedeFacturas', 0);
		$iAccedeZonas	= $resultado->campo('permisoAccedeZonas', 0);
		$iAccedeContactos	= $resultado->campo('permisoAccedeContactos', 0);
		$iAccedeHorarios= $resultado->campo('permisoAccedeHorarios', 0);
		$iHabilitaFijo 	= $resultado->campo('habilitarFijo', 0);
		$iHabilitaMovil = $resultado->campo('habilitarMovil', 0);
		$iHabilitaFlota = $resultado->campo('habilitarFlota', 0);
		$iHabilitaRC	= $resultado->campo('habilitarRC', 0);
		$iHabilitaRCFijo= $resultado->campo('habilitarRCFijo', 0);
		$iVerRutas		= $resultado->campo('permisoVerRutas', 0);
		$iModificarRutas= $resultado->campo('permisoModificarRutas', 0);
		$iVerAgendaGral = $resultado->campo('permisoVerAgendaGral', 0);
		$iModificarAgendaGral= $resultado->campo('permisoModificaAgendaGral', 0);

		$loginClassActual->PERMISOSAlias = array($iMonitorea,$iComandosGPRS,$iComandosSMS,$iVerReportes,$iVerPuntos,$iVerZonas,$iVerContactos,$iVerLogistica,
		$iModificaPuntos,$iModificaZonas,$iModificaContactos,$iModificarLogistica,$iAccessMovil,$iAccedeSetup,$iAccedeEventos,$iAccedeUsuario,
		$iAccedeFacturas,$iAccedeZonas,$iAccedeContactos,$iAccedeHorarios,$iHabilitaFijo,$iHabilitaMovil,$iHabilitaFlota,
		$iHabilitaRC,$iHabilitaRCFijo,$iVerRutas,$iModificarRutas,$iVerAgendaGral,$iModificarAgendaGral);
     	return  $loginClassActual;
     }
	 /**********************************************************************/
	function LoginDealer($loginClass){
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginDealer' ". mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}

		$LOGGER->addLine('INFO', 'Login Dealer -> "'.$loginClassActual->codigoDealer.'"');

		$SQL = "SELECT *, ";
		$SQL.= "CONCAT_WS(' ', cast(d.nombre as char), cast(d.apellido as char)) as descripcion ";
		$SQL.= "FROM dealer d ";
		$SQL.= "WHERE d.login ='". trim($loginClassActual->codigoDealer) . "'";

	  	if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginDealer' " . $mysqli->error.' CONSULTA: '.$SQL );
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
			$LOGGER->addLine('FATAL', 'ERROR 5');
     		$loginClassActual->errorCode = 42;
       		return  $loginClassActual;
     	}

     	$loginClassActual->cuentaFk = $resultado->campo('id', 0);
		$loginClassActual->esFlota 	= 5;//antes estaba seteado con 1
		$loginClassActual->imagen 	= $resultado->campo('imagen', 0);
		$loginClassActual->tablaId 	= $resultado->campo('id', 0);
		$loginClassActual->labelCuenta 	= $resultado->campo('descripcion', 0);
		$loginClassActual->objetivo	= 5;
		$loginClassActual->objetivoDB 	= 5;
		//INICIALIZO EL ARRAY DE PERMISOS DE OBJETIVOS DEALER
		$monitorea 					= $resultado->campo('permisoMonitor', 0);
		$comandosGPRS 				= $resultado->campo('permisoComandosGPRS', 0);
		$comandosSMS 				= $resultado->campo('permisoComandosSMS', 0);
		$puntos 					= $resultado->campo('permisoPuntos', 0);
		$zonas 						= $resultado->campo('permisoZonas', 0);
		$logistica 					= $resultado->campo('permisoLogistica', 0);
		$visualizaContactos 		= $resultado->campo('permisoVisualizaContactos', 0);
		$modificaContactos 			= $resultado->campo('permisoModificaContactos', 0);
		$permisoEventosPorMoviles 	= $resultado->campo('permisoEventosPorMoviles', 0);
		$permisoRutas 	= $resultado->campo('permisoRutas', 0);
		$loginClassActual->PERMISOSdealer = array($monitorea,$comandosGPRS,$comandosSMS,$puntos,$zonas,$logistica,$visualizaContactos,$modificaContactos,$permisoEventosPorMoviles,$permisoRutas);
     	return  $loginClassActual;
     }


	/**********************************************************************/
	function LoginFlota($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginFlota' " . mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
		$LOGGER->addLine('INFO', 'Login Flota -> "'.$loginClassActual->codigoFlota.'"');

		$SQL = " SELECT tlma.ORDER_ID as cuentaFk from tlmapersonas tlma " .
			   " WHERE tlma.USER_WEB = '" . $loginClassActual->codigoFlota . "'" .
			   " AND tlma.ES_FLOTA = true";

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 6;
       		return  $loginClassActual;
     	}
     	$loginClassActual->cuentaFk = $resultado->campo('cuentaFk', 0);
     	$loginClassActual->tablaId = $resultado->campo('cuentaFk', 0);
		$loginClassActual->esFlota = 1;
		$loginClassActual->objetivo = 3;
		$loginClassActual->objetivoDB = 3;
		$loginClassActual->labelCuenta = $loginClassActual->codigoFlota;
		return $loginClassActual;
	}
	/**********************************************************************/
	function LoginCuenta($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginCuenta' ". mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
		$LOGGER->addLine('INFO', 'Login Cuenta -> "'.$loginClassActual->codigocuenta.'"');

		$SQL = " SELECT abma.ORDER_ID as cuentaFk, abma.objetivo as objetivo, ".
			   " abma.LOCKSTAT as lockStat, ".
			   " abma.latitud as latitud, ".
			   " abma.longitud as longitud, ".
			   " abma.LOCKDATE as lockDate,	".
			   " now() as fechaActual	".
			   " FROM abmacodigos abma "	.
			   " INNER JOIN rcmacodigos rc on (rc.ORDER_ID = abma.ID_RC) " .
               " WHERE rc.CODIGOALFA = '" 	. $loginClassActual->codigorc . "'" .
               " AND abma.ID_CL = '" 		. $loginClassActual->codigocuenta . "'" .
               " AND abma.PARTICION = " 	. $loginClassActual->particion .
               " AND abma.OBJETIVO = "		. $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginCuenta' " . $mysqli->error.' CONSULTA: '.$SQL );
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0){
     		$loginClassActual->errorCode = 7;
       		return  $loginClassActual;
     	}
     	$f1 = $resultado->campo('lockDate', 0);
     	$f2 = $resultado->campo('fechaActual', 0);
     	if($resultado->campo('lockStat', 0) == 1 && ( $f1 != null && !fechaAnteriorA($f2,$f1) ) ){
     		$loginClassActual->errorCode = 52;
       		return  $loginClassActual;
     	}

     	$loginClassActual->cuentaFk = $resultado->campo('cuentaFk', 0);
     	$loginClassActual->tablaId = $resultado->campo('cuentaFk', 0);
		$loginClassActual->esFlota = 0;
		$loginClassActual->objetivo = $resultado->campo('objetivo', 0);
		$loginClassActual->objetivoDB = $resultado->campo('objetivo', 0);
		$loginClassActual->labelCuenta = $loginClassActual->codigorc."-".$loginClassActual->codigocuenta;

		return $loginClassActual;
	}
	/**********************************************************************/
	function ProcesarLogin($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		if ($loginClass->errorCode != 0) return $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()) {
     		$LOGGER->addLine('ERROR',"FUNCION: 'ProcesarLogin' " .  mysqli_connect_error() );
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
     	if ($loginClassActual->objetivoDB == 1 || $loginClassActual->objetivoDB == 2 ) {
			if (BYKOM_DB_TYPE == 0) {
				$SQL = "SELECT abma.objetivo as objetivo, " .
						  "abma.AB_ENVCLAVE as clave, " .
						  "elt(abma.WEBCLIENTE,1,0) as habilitado, " .
						  "abma.MONITOREO_WEB as monitoreoWeb, " .
						  "ie.email as mail, " .
						  "abma.ENVIO_GPRS as envioGPRS, " .
						  "abma.ENVIO_SMS as envioSMS , ".
						  "abma.CLIENTE_PRO as isPRO, " .
						  "abma.CONEXIONES_CONCURRENTES as limitConnect, ".
						  "abma.ACCESS_PHONE as accessPhone ".
					 "FROM abmacodigos abma " .
					 " LEFT JOIN internet_email ie on (abma.email_env = ie.codigoemai)" .
				     " WHERE abma.order_id = " . $loginClassActual->cuentaFk;
			} else {
				$SQL = "SELECT abma.objetivo as objetivo, " .
						  "abma.AB_ENVCLAVE as clave, " .
						  "elt(abma.WEBCLIENTE,1,0) as habilitado, " .
						  "abma.MONITOREO_WEB as monitoreoWeb, " .
						  "abma.email_env as mail, " .
						  "abma.ENVIO_GPRS as envioGPRS, " .
						  "abma.ENVIO_SMS as envioSMS , ".
						  "abma.CLIENTE_PRO as isPRO, " .
						  "abma.CONEXIONES_CONCURRENTES as limitConnect, ".
						  "abma.ACCESS_PHONE as accessPhone ".
					 "FROM abmacodigos abma " .
				     " WHERE abma.order_id = " . $loginClassActual->cuentaFk;
			}
		} else {
			if ($loginClassActual->objetivo == 5 || $loginClassActual->esFlota == 5){ //es una cuenta DEALER
				$SQL = "SELECT 5 as objetivo, d.clave as clave, elt(d.habilitado,1,0) as habilitado, d.permisoMonitor as monitoreoWeb,
				d.email as mail, d.permisoComandosGPRS as envioGPRS, d.permisoComandosSMS as envioSMS, 1 as isPRO,
				d.CONEXIONES_CONCURRENTES as limitConnect,	d.permisoPuntos as iPermisoPuntos, d.permisoZonas as iPermisoZonas,
				d.permisoLogistica as iPermisoLogistica, d.permisoVisualizaContactos as iPermisoVisualizaContactos,
				d.permisoModificaContactos as iPermisoModificaContactos, d.permisoEventosPorMoviles as iPermisoEventosPorMoviles,
				d.permisoRutas as iPermisoRutas,  1 as accessPhone
					FROM dealer d " .
				    " WHERE d.id = " . $loginClassActual->cuentaFk;
			}else{	//es una cuenta tipo FLOTA
				if (BYKOM_DB_TYPE == 0) {
					$SQL = "SELECT 3 as objetivo, " .
							"tlma.PASS_WEB as clave, " .
							"elt(tlma.WEBCLIENTE,1,0) as habilitado, " .
							"tlma.MONITOREO_WEB as monitoreoWeb, " .
							"ie.email as mail, " .
							"tlma.ENVIO_GPRS as envioGPRS, " .
							"tlma.ENVIO_SMS as envioSMS, ".
				            "tlma.CLIENTE_PRO as isPRO, " .
				            "tlma.CONEXIONES_CONCURRENTES as limitConnect, ".
						    "tlma.ACCESS_PHONE as accessPhone " .
						  "FROM tlmapersonas tlma " .
				     	" LEFT JOIN internet_email ie on (tlma.codigoemai = ie.codigoemai)" .
				     	" WHERE tlma.order_id = " . $loginClassActual->cuentaFk;
				} else {
					$SQL = "SELECT 3 as objetivo, " .
							"tlma.PASS_WEB as clave, " .
							"elt(tlma.WEBCLIENTE,1,0) as habilitado, " .
							"tlma.MONITOREO_WEB as monitoreoWeb, " .
							"tlma.codigoemai as mail, " .
							"tlma.ENVIO_GPRS as envioGPRS, " .
							"tlma.ENVIO_SMS as envioSMS, ".
				            "tlma.CLIENTE_PRO as isPRO, " .
				            "tlma.CONEXIONES_CONCURRENTES as limitConnect, ".
						    "tlma.ACCESS_PHONE as accessPhone " .
						  "FROM tlmapersonas tlma " .
				     	" WHERE tlma.order_id = " . $loginClassActual->cuentaFk;
				}
			}
		}
		$LOGGER->addLine('INFO', ' CONSULTA: '.$SQL);
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'ProcesarLogin' " . $mysqli->error.' CONSULTA: '.$SQL );
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}

     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() == 0) {
     		$loginClassActual->errorCode = 8;
       		return  $loginClassActual;
     	}

     	//Si no es alias, le seteo mail y clave de la cuenta. Sino obtuvo la info del alias.
     	if ($loginClassActual->objetivo != 4) {
     		$loginClassActual->passwordDB 		= $resultado->campo('clave', 0);
     		$loginClassActual->mail 			= $resultado->campo('mail', 0);
     		$loginClassActual->accessPhoneCuenta= $resultado->campo('accessPhone', 0);
     	}
     	$loginClassActual->objetivoDB 	= $resultado->campo('objetivo', 0);
     	$loginClassActual->habilitado 	= $resultado->campo('habilitado', 0);
   		$loginClassActual->monitoreoWeb = $resultado->campo('monitoreoWeb', 0);
		$loginClassActual->envioGPRS 	= $resultado->campo('envioGPRS', 0);
		$loginClassActual->envioSMS 	= $resultado->campo('envioSMS', 0);
		$loginClassActual->isPRO 		= $resultado->campo('isPRO', 0);
		$loginClassActual->limitConnect = $resultado->campo('limitConnect', 0);
		$adminCNF 						= BykomCliente::getAdminConfig();
		$loginClassActual->chat 		= $adminCNF->campo('chat', 0);
		$blockLoginFail 				= $adminCNF->campo('blockLoginFail', 0);

		if($loginClassActual->objetivo == 4){//Alias
			$SQLAlias = "select
				permisoMonitor,	permisoComandosGPRS, permisoComandosSMS, permisoVerReportes, permisoVerPuntos, permisoVerZonas, permisoVerContactos, permisoVerLogistica,
				permisoModificarPuntos, permisoModificarZonas, permisoModificarContactos, permisoModificarLogistica, permisoMobile, permisoAccedeSetup, permisoAccedeEventos, permisoAccedeUsuarios,
				permisoAccedeFacturas, permisoAccedeZonas, permisoAccedeContactos, permisoAccedeHorarios, habilitarFijo, habilitarMovil, habilitarFlota,
				habilitarRC, habilitarRCFijo, permisoVerRutas, permisoModificarRutas, permisoVerAgendaGral, permisoModificaAgendaGral
				from  aliases a where a.id = ".$loginClassActual->tablaId;

			if (!$mysqli->real_query($SQLAlias)) {
				$LOGGER->addLine('ERROR',"FUNCION: 'ProcesarLogin' " . $mysqli->error.' CONSULTA: '.$SQLAlias );
	      		$loginClassActual->errorCode = 2;
	       		return  $loginClassActual;
	     	}
	     	$resultado2 = BykomCliente::getResultado($mysqli);
	     	if ($resultado2->cantidad() == 0) {
	     		$loginClassActual->errorCode = 8;
	       		return  $loginClassActual;
	     	}
			$loginClassActual->accessPhoneCuenta= $resultado2->campo('permisoMobile', 0);

			if($loginClassActual->esFlota == 5){//si es un alias de un dealer
				$monitorea 		= $resultado->campo('monitoreoWeb', 0);
				$comandosGPRS 	= $resultado->campo('envioGPRS', 0);
				$comandosSMS 	= $resultado->campo('envioSMS', 0);
				$puntos 		= $resultado->campo('iPermisoPuntos', 0);
				$zonas 			= $resultado->campo('iPermisoZonas', 0);
				$logistica 		= $resultado->campo('iPermisoLogistica', 0);
				$visualizaContactos = $resultado->campo('iPermisoVisualizaContactos', 0);
				$modificaContactos 	= $resultado->campo('iPermisoModificaContactos', 0);
				$iPermisoEventosPorMoviles 	= $resultado->campo('iPermisoEventosPorMoviles', 0);
				$iPermisoRutas	= $resultado->campo('iPermisoRutas', 0);
				$loginClassActual->PERMISOSdealer = array($monitorea,$comandosGPRS,$comandosSMS,$puntos,$zonas,$logistica,$visualizaContactos,$modificaContactos,$iPermisoEventosPorMoviles,$iPermisoRutas);
			}
		}

     	if ($loginClassActual->habilitado == 0) {
     		$loginClassActual->errorCode = 9;
       		return  $loginClassActual;
     	}
     	$LOGGER->addLine('INFO',"Cuenta de mail es|" . $loginClassActual->mail . "|");
     	if (trim($loginClassActual->mail) == '') {
     		$loginClassActual->errorCode = 10;
       		return  $loginClassActual;
     	}

     	if (trim($loginClass->passwordDB) == '') {
     		$loginClassActual->errorCode = 11;
     		/*if (BykomCliente::recordatorioDePassword($loginClassActual->cuentaFk, $loginClassActual->objetivoDB) != 1) {
     			$loginClassActual->errorCode = 2;
     		}*/
     		$loginClassActual->errorCode = 16;
     		return  $loginClassActual;
     	}

     	$loginClassActual = BykomCliente::checkLoginCliente($loginClassActual);
     	if ($loginClassActual->usuariosLogueados > 0) {
     		$loginClassActual->errorCode = 18;
       		return  $loginClassActual;
     	}

     	$loginClassActual = BykomCliente::ComprobarAbrlLogin($loginClassActual);
     	if ($loginClassActual->errorCode != 0) {
     		return $loginClassActual;
     	}
     	if (($loginClassActual->contadorLoginFail >= $blockLoginFail) && ($blockLoginFail != 0)) {
     		$loginClassActual->errorCode = 12;
       		return  $loginClassActual;
     	}

     	if ($loginClassActual->password != $loginClassActual->passwordDB) {
     		$loginClassActual->contadorLoginFail = $loginClassActual->contadorLoginFail + 1;
     		$loginClassActual = BykomCliente::updateAbrlLogin($loginClassActual, $loginClassActual->contadorLoginFail);
     		$loginClassActual->errorCode = 13;
       		return  $loginClassActual;
     	} else {
     		$loginClassActual = BykomCliente::updateAbrlLogin($loginClassActual, 0);
     		$loginClassActual->contadorLoginFail = 0;
     		$loginClassActual->errorCode = 0;
     		return $loginClassActual;
     	}
     	$loginClassActual->errorCode = 30;
     	return $loginClassActual;
	}
	/**********************************************************************/
	function recordatorioDePassword($cuentaFk, $objetivo) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "INSERT INTO recordatorio (cuentaFk, objetivo, tipo, enviado) " .
		       " VALUES (" . $cuentaFk . ", " . $objetivo. ", 1, 0)" ;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'recordatorioDePassword' " . $mysqli->error.' CONSULTA: '.$SQL);
      		return 0;
     	}
     	return  1;
	}
	/**********************************************************************/
	function ComprobarAbrlLogin($loginClassActual) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "select abrllogin.CONTADOR as contador, abrllogin.ULTIMAFECHA as fecha" .
			       " from abrllogin where abrllogin.ORDER_RL = " . $loginClassActual->tablaId .
			       " and abrllogin.TYPE = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'ComprobarAbrlLogin' " . $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);

     	if ($resultado->cantidad() == 0) {
     		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
       		$SQL = "insert into abrllogin (abrllogin.ORDER_RL, abrllogin.CONTADOR, abrllogin.ULTIMAFECHA,abrllogin.`TYPE`)
       				values (". $loginClassActual->tablaId.", 0, now(), ".$loginClassActual->objetivo.")";
            if (!$mysqli->real_query($SQL)) {
				$LOGGER->addLine('ERROR',"FUNCION: 'ComprobarAbrlLogin' " . $mysqli->error.' CONSULTA: '.$SQL);
      			$loginClassActual->errorCode = 2;
       			return  $loginClassActual;
     		}
     	}
     	$SQL = "select abrllogin.CONTADOR as contador, abrllogin.ULTIMAFECHA as fecha" .
			       " from abrllogin where abrllogin.ORDER_RL = " . $loginClassActual->tablaId .
			       " and abrllogin.TYPE = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'ComprobarAbrlLogin' " . $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	$loginClassActual->contadorLoginFail = $resultado->campo('contador', 0);
     	$loginClassActual->ultimaFecha = $resultado->campo('fecha', 0);
     	return $loginClassActual;
	}

	/**********************************************************************/
	function updateAbrlLogin($loginClassActual, $valor) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "UPDATE abrllogin SET abrllogin.CONTADOR = " . $valor .
               " WHERE abrllogin.ORDER_RL = " . $loginClassActual->tablaId .
               " AND abrllogin.TYPE = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'updateAbrlLogin' " . $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	return $loginClassActual;
	}

	/**********************************************************************/
	function checkLoginCliente($loginClassActual) {
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "SELECT ul.logueado FROM userlogued ul" .
               " WHERE ul.logueado = 1 AND" .
               " ul.cuentaFk = "  . $loginClassActual->cuentaFk .
               " AND ul.objetivo = " . $loginClassActual->objetivo;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'checkLoginCliente' " . $mysqli->error.' CONSULTA: '.$SQL);
      		$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$respuesta = BykomCliente::getResultado($mysqli);
     	$loginClassActual->usuariosLogueados = $respuesta->cantidad();
     	return $loginClassActual;
	}

	/**********************************************************************/
	function Login ($codigorc,$codigocuenta,$particion,$password,$objetivo){
		global $LOGGER;
    	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "call z_Login_Cliente2('$codigorc','$codigocuenta','$particion','$password','$objetivo')";
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'Login' " . $mysqli->error.' CONSULTA: '.$SQL);
      		printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
      		exit();
    	}
    	return BykomCliente::getResultado($mysqli);
	}

    /**********************************************************************/
	function LoginBykom ($userId, $clavePublica){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    $claveEncriptada = strtoupper(md5($clavePublica.PRIVATE_KEY));

		$SQL = "SELECT *, now() as HORA , AES_DECRYPT(u.OPDATA, '1234') as PERMISOS FROM `usersbykomweb` u ";
	    $SQL .= "WHERE u.`USER_ID` = $userId AND u.`CLAVE` = '$claveEncriptada'";
		if (!$mysqli->real_query($SQL)){
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginBykom' " . $mysqli->error.' CONSULTA: '.$SQL);
	     	printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
	     	exit();
	    }
     	return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function LoginDataActivation($keyCode){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		 $SQL = "SELECT AES_DECRYPT(a.dato, '$keyCode') as data, " .
				"AES_DECRYPT(a.restricciones,'$keyCode') as restricciones, " .
				"AES_DECRYPT(a.timex_master,'$keyCode') as timexMaster, " .
				"MINUTE(TIMEDIFF(NOW(),AES_DECRYPT(a.timex_master,'$keyCode'))) as dif " .
				"FROM `activacion` a limit 1";
		if (!$mysqli->real_query($SQL)){
			$LOGGER->addLine('ERROR',"FUNCION: 'LoginDataActivation' " . $mysqli->error.' CONSULTA: '.$SQL);
	      	exit();
	    }
     	return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function getAdminConfig(){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "select * from `adminconfig` ac order by ac.`id` desc LIMIT 1";
		if (!$mysqli->real_query($SQL)){
		  $LOGGER->addLine('ERROR',"FUNCION: 'getAdminConfig' " . $mysqli->error.' CONSULTA: '.$SQL);
	      printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
	      exit();
	    }
     	return BykomCliente::getResultado($mysqli);
	}

    /**********************************************************************/
    function getCodigoClByCuentaId($cuentaFk){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		$SQL = "select abma.CODIGOCL as codigocl from abmacodigos abma where abma.ORDER_ID = " .$cuentaFk;
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'getCodigoClByCuentaId' " . $mysqli->error.' CONSULTA: '.$SQL);
      		printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
      		exit();
    	}
     	$resultadoParcial = BykomCliente::getResultado($mysqli);
     	return $resultadoParcial->campo('codigocl', 0);
	}
	/**********************************************************************/
	function getFacturasByCodigoCl ($codigoCl, $iniPaginacion, $contar){
		global $LOGGER;
    	$mysqli = new mysqli(HOST_ADM, USER_ADM, PASSWORD_ADM, DB_ADM, PORT_ADM);

		if ($contar == 2) { // quiero el total de las facturas
			$SQL = "call FacturasByCodigoCl('$codigoCl', '$iniPaginacion',100000, 0)";
		} else {
    		$SQL = "call FacturasByCodigoCl('$codigoCl', '$iniPaginacion',".RESULTADO_FACTURAS.", $contar)";
		}
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'getFacturasByCodigoCl' " . $mysqli->error.' CONSULTA: '.$SQL);
      		printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
      		exit();
    	}
     	return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function getPdfById ($id){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_ADM, USER_ADM, PASSWORD_ADM, DB_ADM, PORT_ADM);

		$SQL = "call z_PdfById('$id')";
		if (!$mysqli->real_query($SQL)){
		  $LOGGER->addLine('ERROR',"FUNCION: 'getPdfById' " . $mysqli->error.' CONSULTA: '.$SQL);
	      printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
	      exit();
	    }
	    return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function Cuentas_Cliente($orderId){
		global $LOGGER;
 		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
 	    if (mysqli_connect_errno()) {
   			$LOGGER->addLine('ERROR', mysqli_connect_error());
       		exit();
     	}
	   	$SQL = "SELECT abma.codigocl as codigocl From abmacodigos abma";
		$SQL.= " WHERE abma.order_id =". $orderId;
		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
	        exit();
	    }
	    $resultado = BykomCliente::getResultado($mysqli);
    	$codigocl = $resultado->campo('codigocl',0);

     	$SQL = "SELECT abma.order_id as ORDER_ID,
     				abma.nombre as nombre,
     				abma.nombre_dos as nombre_dos,
     				abma.latitud as latitud,
			  		abma.longitud as longitud,
     				abma.codigocl as codigocl,
     				abma.AVL_PATENTE as patente,
     				abma.AVL_IDENTIFICADOR as identificador,
     				concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
     				CRC.IMAGEN as Imagen,
        			CRC.CODIGOALFA as CodigoAlfa
             FROM abmacodigos abma
             INNER JOIN rcmacodigos as CRC on CRC.ORDER_ID = abma.id_rc
             WHERE abma.CODIGOCL = " . $codigocl. "
             AND (abma.LOCKSTAT<>1 OR ( (abma.LOCKDATE is null) OR (NOW() < abma.LOCKDATE) ) )
             UNION (
   			 SELECT abma.order_id as ORDER_ID,
     				abma.nombre as nombre,
     				abma.nombre_dos as nombre_dos,
     				abma.latitud as latitud,
			  		abma.longitud as longitud,
     				abma.codigocl as codigocl,
     				abma.AVL_PATENTE as patente,
     				abma.AVL_IDENTIFICADOR as identificador,
     				concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
     				CRC.IMAGEN as Imagen,
        			CRC.CODIGOALFA as CodigoAlfa
             FROM abrlsubcuentas abrl";
     	$SQL.= " INNER JOIN abmacodigos abma ON abma.codigocl = abrl.codigocl";
    	$SQL.= " INNER JOIN rcmacodigos as CRC on CRC.ORDER_ID = abma.id_rc";
		$SQL.= " WHERE abrl.codigo_id = ". $codigocl . " AND abma.objetivo = 1
			 AND (abma.LOCKSTAT<>1 OR ( (abma.LOCKDATE is null) OR (NOW() < abma.LOCKDATE) ) ))";

		if (!$mysqli->real_query($SQL)) {
	 		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
        	exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
	/**********************************************************************/
	function Cuentas_ClienteAlias($aliasId){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()) {
		   $LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_ClienteAlias' " . mysqli_connect_error());
	       exit();
	     }

	     $SQL = "SELECT abma.order_id as ORDER_ID,
	     				abma.nombre as nombre,
	     				abma.nombre_dos as nombre_dos,
	     				abma.codigocl as codigocl,
	     				abma.AVL_PATENTE as patente,
	     				abma.AVL_IDENTIFICADOR as identificador,
	     				concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
	     				CRC.IMAGEN as Imagen,
	        			CRC.CODIGOALFA as CodigoAlfa
	        			 from `alias_movil` am
				 inner join abmacodigos as abma on abma.`ORDER_ID` = am.`movilId` and am.objetivo = 1
	             inner JOIN rcmacodigos as CRC on CRC.ORDER_ID = abma.id_rc
	             WHERE am.`aliasId`  = " . $aliasId. "
	             AND (abma.LOCKSTAT<>1 OR ( (abma.LOCKDATE is null) OR (NOW() < abma.LOCKDATE) ) )
	              UNION (
	   			 SELECT abma.order_id as ORDER_ID,
	     				abma.nombre as nombre,
	     				abma.nombre_dos as nombre_dos,
	     				abma.codigocl as codigocl,
	     				abma.AVL_PATENTE as patente,
	     				abma.AVL_IDENTIFICADOR as identificador,
	     				concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
	     				CRC.IMAGEN as Imagen,
	        			CRC.CODIGOALFA as CodigoAlfa
	             FROM abrlsubcuentas abrl
	     		 INNER JOIN abmacodigos abma ON abma.codigocl = abrl.codigocl
	      		 inner join alias_movil  am on abma.`ORDER_ID` = am.`movilId` and am.objetivo = 1
				 INNER JOIN rcmacodigos as CRC on CRC.ORDER_ID = abma.id_rc
		 	 	WHERE am.`aliasId` = ". $aliasId . " AND abma.objetivo = 1
		 	 	AND (abma.LOCKSTAT<>1 OR ( (abma.LOCKDATE is null) OR (NOW() < abma.LOCKDATE) ) ) ) ";

		 if (!$mysqli->real_query($SQL)) {
		 	$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_ClienteAlias' " . $mysqli->error.' CONSULTA: '.$SQL);
	        exit();
	     }
	     return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Cuentas_Cliente_Movil($order_id){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil' " . mysqli_connect_errno());
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
      	$SQL = "call z_Cuentas_Cliente_Movil('$order_id')";
     	if (!$mysqli->real_query($SQL)){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil' " . $mysqli->error.' CONSULTA: '.$SQL);
       		printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Cuentas_Movil_User_Bykom($cuentas){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Movil_User_Bykom' " . mysqli_connect_errno());
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "call z_Cuentas_Movil_User_Bykom('$cuentas')";
     	if (!$mysqli->real_query($SQL)){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Movil_User_Bykom' " . $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Cuentas_Cliente_Movil_BIS($order_id){
		global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_BIS' " . mysqli_connect_errno());
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
      	$SQL = "SELECT ABMA.ORDER_ID,
		     		ABMA.`ID_CL` as Movil,
					ABMA.nombre,
        			ABMA.nombre_dos,
        			ABMA.codigocl,
			        RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
		       		RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
	         		RTRIM(ABMA.`AVL_MARCA`) as Marca,
      		 		RTRIM(ABMA.`AVL_MODELO`) as Modelo,
		     		RTRIM(ABMA.`AVL_PATENTE`) as Patente,
       		 		RTRIM(ABMA.`AVL_ANIO`) as Anio,
       				RTRIM(ABMA.`AVL_COLOR`) as Color,
			        TipoAvl.`ORDER_ID` as CodeAvl,
       				RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
			        RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
       				0 as Grupo,
       				ABMA.`ACTIVO` as Activo,
			        ABMA.`AVL_RESTRINGIDO` as AvlRestringido,
					concat(CRC.`CODIGOALFA`,'-',ABMA.`ID_CL`,'-',cast(ABMA.particion as char)) as Codigo,
        			CRC.`IMAGEN` as Imagen,
        			CRC.`CODIGOALFA` as CodigoAlfa
			 from `abmacodigos` ABMA
			 LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			 inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			 where ABMA.ORDER_ID = ".$order_id."
			 AND (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) ) ";

     	if (!$mysqli->real_query($SQL)){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_BIS' " . $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Cuentas_Cliente_Movil_Flota($flotaId, $orderBy){
	 	global $LOGGER,$LOGIN;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if (mysqli_connect_errno()){
    		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_Flota' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$WHERE = "";
    	if(!$LOGIN->isBykom){
	    	$WHERE .= "  AND (ABMA.WEBCLIENTE = 1 ) ";
		}
		$SQL = "SELECT ABMA.ORDER_ID,
	 		        ABMA.nombre,
			        ABMA.nombre_dos,
			       	ABMA.codigocl,
	   				ABMA.`ID_CL` as Movil,
	   				RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
       				RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
       				RTRIM(ABMA.`AVL_MARCA`) as Marca,
       				RTRIM(ABMA.`AVL_MODELO`) as Modelo,
       				RTRIM(ABMA.`AVL_PATENTE`) as Patente,
       				RTRIM(ABMA.`AVL_ANIO`) as Anio,
       				RTRIM(ABMA.`AVL_COLOR`) as Color,
       				TipoAvl.`ORDER_ID` as CodeAvl,
       				RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
       				RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
       				if(isnull(ABMA.`GRUPOMOVIL`), 0, ABMA.`GRUPOMOVIL`) as Grupo,
       				ABMA.`ACTIVO` as Activo,
       				ABMA.`AVL_RESTRINGIDO` as AvlRestringido,
       				concat(CRC.`CODIGOALFA`,'-',ABMA.`ID_CL`,'-',cast(ABMA.particion as char)) as Codigo,
       				CRC.`IMAGEN` as Imagen,
       				CRC.`CODIGOALFA` as CodigoAlfa
			 from `abmacodigos` ABMA
			 inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			 LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			 where ABMA.FLOTA_ID = " .$flotaId . "
			 $WHERE
			 AND (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) )
			 ORDER BY " . $orderBy . ";";
 		$LOGGER->addLine('DEBUG', $SQL);
     	if (!$mysqli->real_query($SQL)){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_Flota' " . $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    function Cuentas_Cliente_Movil_FlotaAlias($aliasId, $orderBy, $filtroInabilitado = false){
	 	global $LOGGER,$LOGIN;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_FlotaAlias' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
    	$WHERE = "";
	   	if($filtroInabilitado){
	    	$WHERE .= "  AND (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) ) ";
		}
		if(!$LOGIN->isBykom){
	    	$WHERE .= "  AND (ABMA.WEBCLIENTE = 1 ) ";
		}
	  	$SQL = "SELECT ABMA.ORDER_ID,
	 		        ABMA.nombre,
			        ABMA.nombre_dos,
			       	ABMA.codigocl,
	   				ABMA.`ID_CL` as Movil,
	   				RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
       				RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
       				RTRIM(ABMA.`AVL_MARCA`) as Marca,
       				RTRIM(ABMA.`AVL_MODELO`) as Modelo,
       				RTRIM(ABMA.`AVL_PATENTE`) as Patente,
       				RTRIM(ABMA.`AVL_ANIO`) as Anio,
       				RTRIM(ABMA.`AVL_COLOR`) as Color,
       				TipoAvl.`ORDER_ID` as CodeAvl,
       				RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
       				RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
       				if(isnull(ABMA.`GRUPOMOVIL`), 0, ABMA.`GRUPOMOVIL`) as Grupo,
       				ABMA.`ACTIVO` as Activo,
       				ABMA.`AVL_RESTRINGIDO` as AvlRestringido,
       				concat(CRC.`CODIGOALFA`,'-',ABMA.`ID_CL`,'-',cast(ABMA.particion as char)) as Codigo,
       				CRC.`IMAGEN` as Imagen,
       				CRC.`CODIGOALFA` as CodigoAlfa
			 from `abmacodigos` ABMA
			 inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			 LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			 where ABMA.`ORDER_ID` IN (select AM.`movilId` from `alias_movil` AM where AM.aliasId = ".$aliasId.")
			  $WHERE
	  		 ORDER BY " . $orderBy;

     	if (!$mysqli->real_query($SQL)){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_FlotaAlias' " . $mysqli->error.' CONSULTA: '.$SQL );
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    function getMovilesByDealer($id, $orderBy){
     	global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'getMovilesByDealer' " . mysqli_connect_error() );
	    	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }
	    $SQL= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido
			   from `dealer_cuenta` D_Cta
			   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 2
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where D_Cta.`dealerFk` = ".$id." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
			   and D_Cta.objetivo = 2
			   AND (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) ) ";
		if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
	    if (!$mysqli->real_query($SQL)){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'getMovilesByDealer' " . $mysqli->error.' CONSULTA: '.$SQL );
	       	exit();
	    }
	    return BykomCliente::getResultado($mysqli);
    }

    function Cuentas_Cliente_Movil_Dealer($id, $orderBy){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_Dealer' " .  mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	     }
		$SQL.= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido
			   from `dealer_cuenta` D_Cta
			   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 2
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where D_Cta.`dealerFk` = ".$id." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
			   and D_Cta.objetivo = 2 AND (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) )";
		$SQL.= " UNION ";
		$SQL.= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido
			   from `dealer_rc` D_Rc
			   inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 2
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where D_Rc.`dealerFk` = ".$id." and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
				and ABMA.OBJETIVO = 2 AND (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) )";

		$SQL.= " UNION ";
		$SQL.= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido
			   from `dealer_flota` D_Flota
			   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where D_Flota.`dealerFk` = ".$id." and (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
			   and ABMA.OBJETIVO = 2  AND (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) )";
		$SQL.= " ORDER BY " . $orderBy;

		$LOGGER->addLine('DEBUG', $SQL);
	    if (!$mysqli->real_query($SQL)){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_Dealer' " . $mysqli->error.' CONSULTA: '.$SQL );
       		exit();
	    }
    	return BykomCliente::getResultado($mysqli);
    }

    /**
     * Obtiene las flotas de un dealer
     * @param int $idDealer
     * @param string $orderBy
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
    function Cuentas_Cliente_Flotas_Dealer($idDealer,$orderBy,$idRC){
	    global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
			$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Flotas_Dealer' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	      	exit();
	    }
    	$SQL= "select RTRIM(tlma.NOMBRE_MIX) as sDescription, df.flotaFk as iFlotaId, df.*,abma.ID_RC as idRc
				 from `dealer_flota` df
				 inner join tlmapersonas as tlma on tlma.ORDER_ID = df.flotaFk
				 join abmacodigos abma on abma.FLOTA_ID  = df.flotaFk
			     where df.`dealerFk` = ".$idDealer." and (isnull(df.`caduca`) or df.`caduca` >= now())";
    	if($idRC != null){
    		$SQL.= " and abma.ID_RC = $idRC ";
    	}
    	$SQL.= " group by sDescription ";

    	if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
    	if (!$mysqli->real_query($SQL)){
    		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Flotas_Dealer' " .  $mysqli->error.' CONSULTA: '.$SQL );
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**
     * Obtiene los RC de un dealer segun el tipo (fijo o movil)
     * @param int $idDealer
     * @param string $orderBy
     * @param int $iObjetivo
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
    function Cuentas_Cliente_Rc_Dealer($idDealer,$orderBy,$iObjCuenta){
    	global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
			$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Rc_Dealer' " .  mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }
    	$SQL= "SELECT RTRIM(rc.NOMBRE) as sDescription, drc.empresaFk as iRCId, drc.objetivo as iObjetivo
				from `dealer_rc` drc
				inner join rcmacodigos as rc on rc.ORDER_ID = drc.empresaFk
			    where drc.`dealerFk` = ".$idDealer." and (isnull(drc.`caduca`) or drc.`caduca` >= now())
			    and drc.objetivo = $iObjCuenta ";

    	if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
    	if (!$mysqli->real_query($SQL)){
    		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Rc_Dealer' " . $mysqli->error.' CONSULTA: '.$SQL );
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**
     * Obtiene los moviles de un dealer a partir de un RC y/o una flota.
     * @param int $idDealer
     * @param int $idRc
     * @param int $idFlota
     * @param string $orderBy
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
	function Cuentas_Cliente_Movil_Dealer_By_RCAndFlotas($id,$idRc,$idFlota, $orderBy){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_Dealer_By_RCAndFlotas' " . mysqli_connect_error() );
     	  	printf("Conexion fallida: %s\n", mysqli_connect_error());
     	  	exit();
     	}
     	$SQL= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido ";
     	if($idRc  && !$idFlota){//movil by RC
			$SQL.= " from `dealer_rc` D_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Rc.`dealerFk` = $id and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
					and  D_Rc.empresaFk = $idRc and ABMA.OBJETIVO = 2
					AND  (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) )";
		}else if($idFlota && !$idRc){//movil by flota
			$SQL.= " from `dealer_flota` D_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Flota.`dealerFk` = $id and (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
				   and  D_Flota.flotaFk = $idFlota and ABMA.OBJETIVO = 2
				   AND  (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) ) ";
		}else if($idFlota && $idRc){
			$SQL.= " from `dealer_flota` D_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Flota.`dealerFk` = $id and (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
				   and  D_Flota.flotaFk = $idFlota and ABMA.ID_RC = $idRc and ABMA.OBJETIVO = 2
				   AND  (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) )";
		}

		if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
	    if (!$mysqli->real_query($SQL)){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_Dealer_By_RCAndFlotas' " . $mysqli->error.' CONSULTA: '.$SQL );
	       	exit();
	    }
	    return BykomCliente::getResultado($mysqli);
    }

    function getFijosByDealer($iDealerId,$orderBy){
    	global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'getFijosByDealer' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }
	    $SQL = "";
		$SQL.= "SELECT ABMA.order_id as ORDER_ID,
     			ABMA.nombre as nombre,
     			ABMA.nombre_dos as nombre_dos,
     			ABMA.codigocl as codigocl,
     			ABMA.AVL_PATENTE as patente,
     			ABMA.AVL_IDENTIFICADOR as identificador,
     			concat(CRC.CODIGOALFA,'-',ABMA.ID_CL,'-',cast(ABMA.particion as char)) as Codigo,
     			CRC.IMAGEN as Imagen,
        		CRC.CODIGOALFA as CodigoAlfa,
        		ABMA.LATITUD as latitud,
        		ABMA.LONGITUD as longitud,
        		ABMA.ACTIVO as activo
		   from `dealer_cuenta` D_Cta
		   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 1
		   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
		   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
		   where D_Cta.`dealerFk` = ".$iDealerId." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
		   and D_Cta.objetivo = 1
		   AND  (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) ) ";
		if(trim($orderBy)){
			$SQL.= " ORDER BY " . $orderBy;
		}
	 	if (!$mysqli->real_query($SQL)){
	 	   $LOGGER->addLine('ERROR',"FUNCION: 'getFijosByDealer' " .$mysqli->error.' CONSULTA: '.$SQL );
	       exit();
	    }
	    return BykomCliente::getResultado($mysqli);
    }
	/**
	 * Obtengo las cuentas de tipo fijo para un dealer
	 * @param int $iDealerId
	 * @param string $orderBy
	 * @param int $iRc
	 */
    function getCuentasByDealer($iDealerId,$orderBy,$iRc){
    	global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'getCuentasByDealer' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }
	    $SQL = "";
	    if($iRc==""){
			$SQL.= "SELECT ABMA.order_id as ORDER_ID,
     				ABMA.nombre as nombre,
     				ABMA.nombre_dos as nombre_dos,
     				ABMA.codigocl as codigocl,
     				ABMA.AVL_PATENTE as patente,
     				ABMA.AVL_IDENTIFICADOR as identificador,
     				concat(CRC.CODIGOALFA,'-',ABMA.ID_CL,'-',cast(ABMA.particion as char)) as Codigo,
     				CRC.IMAGEN as Imagen,
        			CRC.CODIGOALFA as CodigoAlfa,
        			ABMA.LATITUD as latitud,
        			ABMA.LONGITUD as longitud,
        			ABMA.ACTIVO as activo
			   from `dealer_cuenta` D_Cta
			   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 1
			   AND  (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) )
			   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where D_Cta.`dealerFk` = ".$iDealerId." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
			   and D_Cta.objetivo = 1 ";
			$SQL.= " UNION ";
	    }
		$SQL.= "SELECT abma.order_id as ORDER_ID,
		     		abma.nombre as nombre,
		     		abma.nombre_dos as nombre_dos,
		     		abma.codigocl as codigocl,
		     		abma.AVL_PATENTE as patente,
		     		abma.AVL_IDENTIFICADOR as identificador,
		     		concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
		     		CRC.IMAGEN as Imagen,
		        	CRC.CODIGOALFA as CodigoAlfa,
		        	abma.LATITUD as latitud,
        			abma.LONGITUD as longitud,
        			abma.ACTIVO as activo
			   from `dealer_rc` D_Rc
			   inner join abmacodigos as abma on abma.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 1 ";
			   if($iRc!=""){
			   		$SQL.= " and D_Rc.empresaFk = $iRc ";
			   }
		$SQL.= " INNER JOIN rcmacodigos as CRC on CRC.`ORDER_ID` = abma.id_rc
			    LEFT JOIN `abrltipoavl` TipoAvl ON abma.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			    WHERE D_Rc.`dealerFk` = ".$iDealerId." and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
				AND abma.OBJETIVO = 1 
				AND  (abma.LOCKSTAT<>1 OR ( (abma.LOCKDATE is null) OR (NOW() < abma.LOCKDATE) ) ) ";
		if(trim($orderBy)){
			$SQL.= " ORDER BY " . $orderBy;
		}
	 	$LOGGER->addLine('ERROR', $SQL);
	 	if (!$mysqli->real_query($SQL)){
	 		$LOGGER->addLine('ERROR',"FUNCION: 'getCuentasByDealer' " . $mysqli->error.' CONSULTA: ' . $SQL );
	       	exit();
	    }
	    return BykomCliente::getResultado($mysqli);
    }
	/**
	 * Obtengo las cuentas de tipo fijo para un Alias
	 * @param int $iDealerId
	 * @param string $orderBy
	 * @param int $iRc
	 */
    function getCuentasByAlias($iAliasId, $orderBy, $iRc, $iDealerId, $filtroHabilitado=false){
    	global $LOGGER,$LOGIN;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'getCuentasByAlias' " . mysqli_connect_error() );
	    	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }

	    $WHERE = "";
	    if($filtroHabilitado){
	    	$WHERE .= " AND  (abma.LOCKSTAT<>1 OR ( (abma.LOCKDATE is null) OR (NOW() < abma.LOCKDATE) ) ) ";
	    }
	    $SQLSELECT = " SELECT abma.order_id as ORDER_ID,
     				abma.nombre as nombre,
     				abma.nombre_dos as nombre_dos,
     				abma.codigocl as codigocl,
     				abma.LATITUD as latitud,
        			abma.LONGITUD as longitud,
     				abma.AVL_PATENTE as patente,
     				abma.AVL_IDENTIFICADOR as identificador,
     				concat(CRC.CODIGOALFA,'-',abma.ID_CL,'-',cast(abma.particion as char)) as Codigo,
     				CRC.IMAGEN as Imagen,
        			CRC.CODIGOALFA as CodigoAlfa ";
	    $SQL = "";
	    if($iRc==""){
	    	if($LOGIN->PERMISOSAlias[20]){//si tiene habilitado fijos (habilitarFijo=1)
				$SQLFROM1= " from `alias_movil` A_Cta
				   inner join abmacodigos as abma on abma.`ORDER_ID` = A_Cta.`movilId` and A_Cta.objetivo = 1
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = abma.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON abma.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Cta.`aliasId` = ".$iAliasId." and (isnull(A_Cta.`caduca`) or A_Cta.`caduca` >= now())
				   and A_Cta.objetivo = 1
				   $WHERE ";

				$resultRows = cConfiguracion::getCuentasByAlias($iAliasId,1);
				if($resultRows->cantidad()==0){//si el Alias no tiene ninguna asignada tomo las del Dealer
					  $SQLFROM1 = " from `dealer_cuenta` D_Cta
				   inner join abmacodigos as abma on abma.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 1
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = abma.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON abma.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Cta.`dealerFk` = ".$iDealerId." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
				   and D_Cta.objetivo = 1
				   $WHERE ";
				}
				$SQL.= $SQLSELECT.$SQLFROM1;
	    	}
	    }
		if($LOGIN->PERMISOSAlias[24]){//si tiene habilitado RC Fijos (habilitarRCFijo=1)
			if($SQL!=""){
				$SQL.= " UNION ";
			}
			$SQLFROM2 = " from `alias_rc` A_Rc
				   inner join abmacodigos as abma on abma.`ID_RC` = A_Rc.`empresaFk` and A_Rc.objetivo = 1 ";
			if($iRc!=""){
				$SQLFROM2.= " and A_Rc.empresaFk = $iRc ";
			}
			$SQLFROM2.= " inner join rcmacodigos as CRC on CRC.`ORDER_ID` = abma.id_rc
				    LEFT JOIN `abrltipoavl` TipoAvl ON abma.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				    where A_Rc.`aliasFk` = ".$iAliasId." and  (isnull(A_Rc.`caduca`) or A_Rc.`caduca` >= now())
					and abma.OBJETIVO = 1
					$WHERE ";
		   	$resultRows = cConfiguracion::getRCByAlias($iAliasId,1);
			if($resultRows->cantidad()==0){//si el Alias no tiene ninguna asignada tomo las del Dealer
				$SQLFROM2 = " from `dealer_rc` D_Rc
				   inner join abmacodigos as abma on abma.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 1 ";
				   if($iRc!=""){
				   		$SQLFROM2.= " and D_Rc.empresaFk = $iRc ";
				   }
				$SQLFROM2.= " inner join rcmacodigos as CRC on CRC.`ORDER_ID` = abma.id_rc
				    LEFT JOIN `abrltipoavl` TipoAvl ON abma.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				    where D_Rc.`dealerFk` = ".$iDealerId." and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
					and abma.OBJETIVO = 1
					$WHERE ";
			}
			$SQL.= $SQLSELECT.$SQLFROM2;
		}

		if($SQL!="" && trim($orderBy)){
			$SQL.= " ORDER BY " . $orderBy;
		}
		if($SQL==""){
	 	 	return "";
	 	}
	 	$LOGGER->addLine('INFO', $SQL);
	 	if (!$mysqli->real_query($SQL)){
	 		$LOGGER->addLine('ERROR',"FUNCION: 'getCuentasByAlias' " . $mysqli->error.' CONSULTA: '.$SQL );
	       	exit();
	    }
	    return BykomCliente::getResultado($mysqli);
    }
  	/**
     * Obtiene las flotas de un Alias
     * @param int $idAlias
     * @param string $orderBy
     * @param int $idRC
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
    function Cuentas_Cliente_Flotas_Alias($idAlias,$orderBy,$idRC){
	    global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()){
			$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Flotas_Alias' " . mysqli_connect_error() );
	     	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }
    	$SQL= "select RTRIM(tlma.NOMBRE_MIX) as sDescription, af.flotaFk as iFlotaId, af.*,abma.ID_RC as idRc
				 from `alias_flota` af
				 inner join tlmapersonas as tlma on tlma.ORDER_ID = af.flotaFk
				 join abmacodigos abma on abma.FLOTA_ID  = af.flotaFk
			     where af.`aliasFk` = ".$idAlias." and (isnull(af.`caduca`) or af.`caduca` >= now())";
    	if($idRC != null){
    	 	$SQL.= " and abma.ID_RC = $idRC ";
    	}
    	$SQL.= " group by sDescription ";

    	if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
    	if (!$mysqli->real_query($SQL)){
    		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Flotas_Alias' " . $mysqli->error.' CONSULTA: '.$SQL );
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
 	 /**
     * Obtiene los RC de un Alias segun el tipo (fijo o movil)
     * @param int $idAlias
     * @param string $orderBy
     * @param int $iObjCuenta
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
    function Cuentas_Cliente_Rc_Alias($idAlias,$orderBy,$iObjCuenta){
	     global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Rc_Alias' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	     }
    	 $SQL= "SELECT RTRIM(rc.NOMBRE) as sDescription, arc.empresaFk as iRCId
				from `alias_rc` arc
				inner join rcmacodigos as rc on rc.ORDER_ID = arc.empresaFk
			    where arc.`aliasFk` = ".$idAlias." and (isnull(arc.`caduca`) or arc.`caduca` >= now())
			    and arc.objetivo = $iObjCuenta ";

    	if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
    	if (!$mysqli->real_query($SQL)){
    		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Rc_Alias' " .$mysqli->error.' CONSULTA: '.$SQL );
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }

	/**
     * Obtiene los moviles de un alias a partir de un RC y/o una flota.
     * @param int $id
     * @param int $idRc
     * @param int $idFlota
     * @param string $orderBy
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
	function Cuentas_Cliente_Movil_Alias_By_RCAndFlotas($id,$idRc,$idFlota, $orderBy){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_Alias_By_RCAndFlotas' " .mysqli_connect_error() );
     	  	printf("Conexion fallida: %s\n", mysqli_connect_error());
     	  	exit();
     	}
     	$SQL= "SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido ";
     	if($idRc  && !$idFlota){
			$SQL.= " from `alias_rc` A_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = A_Rc.`empresaFk` and A_Rc.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Rc.`aliasFk` = $id and  (isnull(A_Rc.`caduca`) or A_Rc.`caduca` >= now())
					and  A_Rc.empresaFk = $idRc and ABMA.OBJETIVO = 2
					AND  (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) ) ";
		}else if($idFlota && !$idRc){
			$SQL.= " from `alias_flota` A_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = A_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Flota.`aliasFk` = $id and (isnull(A_Flota.`caduca`) or A_Flota.`caduca` >= now())
				   and  A_Flota.flotaFk = $idFlota and ABMA.OBJETIVO = 2
				   AND  (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) ) ";
		}else if($idFlota && $idRc){
			$SQL.= " from `alias_flota` A_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = A_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Flota.`aliasFk` = $id and (isnull(A_Flota.`caduca`) or A_Flota.`caduca` >= now())
				   and  A_Flota.flotaFk = $idFlota and ABMA.ID_RC = $idRc and ABMA.OBJETIVO = 2
				   AND  (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) )  ";
		}
		if($orderBy != ""){
			$SQL.= " ORDER BY " . $orderBy;
    	}
	     if (!$mysqli->real_query($SQL)){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_Alias_By_RCAndFlotas' " . $mysqli->error.' CONSULTA: '.$SQL );
	       	exit();
	     }
	     return BykomCliente::getResultado($mysqli);
    }
    /**
     * Obtiene los moviles de un alias.
     * @param int $id
     * @param int $iDealerId
     * @param string $orderBy
     * @return cResultado
     * <rrio@aplay.com.ar>
     */
	function Cuentas_Cliente_Movil_DealerAlias($id,$iDealerId, $orderBy,$filtroHabilitado=false){
		 global $LOGGER,$LOGIN;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_DealerAlias' " .  mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	     }
	    $WHERE = "";
	    if($filtroHabilitado){
		    $WHERE .= " AND (ABMA.LOCKSTAT<>1 OR ( (ABMA.LOCKDATE is null) OR (NOW() < ABMA.LOCKDATE) ) ) ";
	    }
   		$SQL="";
     	$SQLSELECT = " SELECT ABMA.ORDER_ID,
			   ABMA.`ID_CL` as Movil,
			   RTRIM(CONCAT(ABMA.`NOMBRE`, ' ', ABMA.`NOMBRE_DOS`)) as Descripcion,
               RTRIM(ABMA.`AVL_IDENTIFICADOR`) as Identificador,
               RTRIM(ABMA.`AVL_MARCA`) as Marca,
               RTRIM(ABMA.`AVL_MODELO`) as Modelo,
               RTRIM(ABMA.`AVL_PATENTE`) as Patente,
               RTRIM(ABMA.`AVL_ANIO`) as Anio,
               RTRIM(ABMA.`AVL_COLOR`) as Color,
               TipoAvl.`ORDER_ID` as CodeAvl,
               RTRIM(TipoAvl.`IMAGEN`) as TipoAvl,
               RTRIM(TipoAvl.`NOMBRE`) as TipoAvlNombre,
               if(isnull(ABMA.`FLOTA_ID`), 0, ABMA.`FLOTA_ID`) as Grupo,
               ABMA.`ACTIVO` as Activo,
               ABMA.`AVL_RESTRINGIDO` as AvlRestringido ";
     	$SQLFROM1="";
	 	if($LOGIN->PERMISOSAlias[21]){//si tiene habilitado movil (habilitarMovil=1)
			$SQLFROM1 = " from `alias_movil` A_Cta
			   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = A_Cta.`movilId` and A_Cta.objetivo = 2
			    $WHERE
			   INNER JOIN rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
			   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
			   where A_Cta.`aliasId` = ".$id." and  (isnull(A_Cta.`caduca`) or A_Cta.`caduca` >= now()) ";
			$resultRows = cConfiguracion::getCuentasByAlias($id,2);
			if($resultRows->cantidad()==0){//si no tiene asignada ninguna cuenta se le asigna las del dealer
				  $SQLFROM1 = " from `dealer_cuenta` D_Cta
				   inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk` and D_Cta.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Cta.`dealerFk` = ".$iDealerId." and (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now())
				   and D_Cta.objetivo = 2
				  $WHERE ";
			}
			$SQL.= $SQLSELECT;
			$SQL.= $SQLFROM1;
	    }


		$SQLFROM2 = "";
		if($LOGIN->PERMISOSAlias[23]){//si tiene habilitado Empresas (habilitarRC=1)
			if($SQL!=""){
				$SQL.= " UNION ";
			}
			$SQLFROM2 = " from `alias_rc` A_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = A_Rc.`empresaFk` and A_Rc.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Rc.`aliasFk` = ".$id." and  (isnull(A_Rc.`caduca`) or A_Rc.`caduca` >= now())
				   and ABMA.OBJETIVO = 2
				   $WHERE ";
			$resultRows =  cConfiguracion::getRCByAlias($id,2);
			if($resultRows->cantidad()==0){//si no tiene asignada ninguna empresa se le asigna las del dealer
				  $SQLFROM2 = " from `dealer_rc` D_Rc
				   inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk` and D_Rc.objetivo = 2
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Rc.`dealerFk` = ".$iDealerId." and  (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now())
					and ABMA.OBJETIVO = 2
					$WHERE ";
			}
			$SQL.= $SQLSELECT;
			$SQL.= $SQLFROM2;
		}
		if($LOGIN->PERMISOSAlias[22]){//si tiene habilitado Flota (habilitarFlota=1)
			if($SQL!=""){
				$SQL.= " UNION ";
			}
			$SQLFROM3 =" from `alias_flota` A_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = A_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where A_Flota.`aliasFk` = ".$id." and (isnull(A_Flota.`caduca`) or A_Flota.`caduca` >= now())
				   and ABMA.OBJETIVO = 2
				   $WHERE ";
			$resultRows =  cConfiguracion::getFlotasByAlias($id);
			if($resultRows->cantidad()==0){
				  $SQLFROM3 = " from `dealer_flota` D_Flota
				   inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
				   inner join rcmacodigos as CRC on CRC.`ORDER_ID` = ABMA.id_rc
				   LEFT JOIN `abrltipoavl` TipoAvl ON ABMA.`AVL_TIPO` = TipoAvl.`ORDER_ID`
				   where D_Flota.`dealerFk` = ".$iDealerId." and (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
				   and ABMA.OBJETIVO = 2
				   $WHERE ";
			}
			$SQL.= $SQLSELECT;
			$SQL.= $SQLFROM3;
		}
		if($SQL!=""){
			$SQL	.= " ORDER BY " . $orderBy;
		}
	 	$LOGGER->addLine('ERROR', $SQL);
	 	if($SQL==""){
	 	 	return "";
	 	}
     	if (!$mysqli->real_query($SQL)){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Cuentas_Cliente_Movil_DealerAlias' " .  $mysqli->error.' CONSULTA: '.$SQL );
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
   function Obtener_Order_id($codigocl){
   		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Obtener_Order_id' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
        $SQL = "SELECT order_id FROM ABMACODIGOS WHERE CODIGOCL = '$codigocl'";
        if (!$mysqli->real_query($SQL)){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Obtener_Order_id' " .  $mysqli->error.' CONSULTA: '.$SQL );
           	exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Obtener_Direccion_Abreviada($direccion)  {
    	if (strpos($direccion,"|") === false || strpos($direccion,"Error") !== false) return $direccion;

    	$callePrincipal = substr($direccion, 0 , strpos($direccion,"|"));
        $direccion = substr($direccion, strpos($direccion,"|")+1);
        $calleTipo = substr($direccion,0,strpos($direccion,"|"));
        $direccion = substr($direccion, strpos($direccion,"|")+1);
        $alturaPrincipal = substr($direccion,0,strpos($direccion,"|"));
        $direccion = substr($direccion, strpos($direccion,"|")+1);
        $localidad = substr($direccion,0,strpos($direccion,"|"));
        $direccion = substr($direccion, strpos($direccion,"|")+1);
        $ciudad = $direccion;
        $alturaFormateada = "";
        if (trim($alturaPrincipal) == "-1") {
        	$alturaFormateada = "(Sin altura)";
        } else {
        	$alturaFormateada = "N&ordm; ".$alturaPrincipal;
        }
		//format result
		if (trim(strtoupper($callePrincipal)) == 'SIN DATOS')
			$result = $localidad.' - '.$ciudad;
		else if (trim(strtoupper($calleTipo)) == 'RUTA'){
				if (((int)$alturaPrincipal) > 0)
					$result = $callePrincipal.' KM '.$alturaPrincipal.' - '.$localidad.' '.$ciudad;
				else
					$result = $callePrincipal.' KM S/D - '.$localidad.' '.$ciudad;
			 } else
			    $result = $callePrincipal." ".$alturaFormateada. " - ".$localidad." - ".$ciudad;

        return $result;
    }
    /**********************************************************************/
    function Obtener_Palabra_Validez($validez){
    	$result = "";
    	if ($validez > 255){
    		$result = "INVALIDO";
    	}else{
    		$result = "VALIDO";
    	}
    	return $result;
    }
    /**********************************************************************/
    function Obtener_Palabra_Sentido($sentido)  {
    	$result = "";
    	if ($sentido >= 22 && $sentido <= 67){
    		$result = "NORESTE";
    	}
        if ($sentido >= 68 && $sentido <= 112){
    		$result = "ESTE";
    	}
    	if ($sentido >= 113 && $sentido <= 157){
    		$result = "SURESTE";
    	}
    	if ($sentido >= 157 && $sentido <= 202){
    		$result = "SUR";
    	}
    	if ($sentido >=203  && $sentido <= 247){
    		$result = "SUROESTE";
    	}
    	if ($sentido >= 248 && $sentido <= 292){
    		$result = "OESTE";
    	}
    	if ($sentido >= 293 && $sentido <= 337){
    		$result = "NOROESTE";
    	}
    	if (($sentido >= 338 && $sentido <= 360) || (($sentido >= 0 && $sentido <= 21))){
    		$result = "NORTE";
    	}
		return $result;
    }
    /**********************************************************************/
    function Obtener_Imagen_Sentido($velocidad, $sentido){
    	if ($sentido >= 22 && $sentido <= 67){
    		$imagenSentido = "flecha_ne";
    	}
        if ($sentido >= 68 && $sentido <= 112){
    		$imagenSentido = "flecha_e";
    	}
    	if ($sentido >= 113 && $sentido <= 157){
    		$imagenSentido = "flecha_se";
    	}
    	if ($sentido >= 157 && $sentido <= 202){
    		$imagenSentido = "flecha_s";
    	}
    	if ($sentido >=203  && $sentido <= 247){
    		$imagenSentido = "flecha_so";
    	}
    	if ($sentido >= 248 && $sentido <= 292){
    		$imagenSentido = "flecha_o";
    	}
    	if ($sentido >= 293 && $sentido <= 337){
    		$imagenSentido = "flecha_no";
    	}
    	if (($sentido >= 338 && $sentido <= 360) || (($sentido >= 0 && $sentido <= 21))){
    		$imagenSentido = "flecha_n";
    	}
	    if ($velocidad <> 0){
			$imagenSentido = $imagenSentido."_M";
	    }
		$imagenSentido = $imagenSentido.".bmp";
		return $imagenSentido;
    }
    /**********************************************************************/
    function Delete_Path_Mapa($lcPath){
        /*echo "path: ".$lcPath;
        echo "path2: ".ROOT_DIR_MAPS."/".basename($lcPath);
        echo "pathComp: ".MAPS."/".basename($lcPath);*/
    	if ($lcPath <> ''){
    		$baseName = basename($lcPath);
    		if ($baseName <> ''){
    			//echo "Borrando mapa1: ".ROOT_DIR_MAPS."/".$baseName;
        		//echo "Borrando mapa2: ".ROOT_DIR_MAPS_DLL."/".$baseName;
    			unlink(ROOT_DIR_MAPS."/".$baseName);
        		unlink(ROOT_DIR_MAPS_DLL."/".$baseName);
        	}
    	}
    	return ;
    }
    /**********************************************************************/
    function Obtener_Path_Mapa($lcPath){
        /*echo "path: ".$lcPath;
        echo "path2: ".ROOT_DIR_MAPS."/".basename($lcPath);
        echo "pathComp: ".MAPS."/".basename($lcPath);*/
        if (copy($lcPath,ROOT_DIR_MAPS."/".basename($lcPath))){
    		$result = MAPS."/".basename($lcPath);
	  	}else{
    		$result = PATH_FOTO_MAPA_DEFAULT;
       	}
       return $result;
    }
    /**********************************************************************/
    function Generar_Mapa_Historico($cuenta,$fechai,$fechaf,$zoom,$centroX,$centroY){
    	/*$omapservermap = new COM("MapServer.Mapa");
     	$consultaImagenAVL = BykomCliente::Consulta_Imagen_Avl($cuenta);
     	$imagenVehiculo = $consultaImagenAVL->campo('imagen',0);
        $alto = ALTO_AVL;
        $ancho = ANCHO_AVL;
        $zoom = ZOOM_AVL;
        $calidad = CALIDAD_AVL;
        $ds = DS_AVL;
        $user = USER_AVL;
        $pass = PASSWORD_AVL;
        $bool = 'True';
        if ($centroX == '' || $centroY == '')
        {
        	$centroX = '';
        	$centroY = '';
        }
        $lcPath = $omapservermap->HistoricoMapaWeb($cuenta,$fechai, $fechaf, $ds, $user, $pass, $zoom, $calidad, $imagenVehiculo, $alto, $ancho, $bool, $centroX, $centroY);
        //$lcPath = BykomCliente::Obtener_Path_Mapa($lcPath);
    	return $lcPath;*/
    	return -1;
    }

    /**********************************************************************/
    function Generar_Mapa_Simple($omapservermap,$cuenta,$latitud,$longitud,$velocidad,$sentido, $centroX, $centroY, $zoom){
    	$consultaImagenAVL = BykomCliente::Consulta_Imagen_Avl($cuenta);
    	$imagenVehiculo = $consultaImagenAVL->campo('imagen',0);
    	$velInt = intval($velocidad);
    	$senInt = intval($sentido);
    	$imagenSentido = BykomCliente::Obtener_Imagen_Sentido($velInt,$senInt);
        $alto = ALTO_AVL;
        $ancho = ANCHO_AVL;
        $calidad = CALIDAD_AVL;

    	$omapservermap->AgregarIconoWeb($latitud,$longitud, $imagenVehiculo,$zoom,$calidad, $ancho, $alto);
    	$omapservermap->AgregarIconoWeb($latitud, $longitud, $imagenSentido,$zoom, $calidad, $ancho, $alto);

    	//para que tome centro
    	$imagenVacia = 'popopo';
    	$omapservermap->AgregarIconoWeb($centroX, $centroY, $imagenVacia,$zoom, $calidad, $ancho, $alto);
    }
    /**********************************************************************/
    function Consulta_Distancia_Total_Avl($consulta){
      	global $LOGGER;
      	$result = 0;
      	if ($consulta->cantidad() > 1){
      		$R = 6371;
      		$totalPuntos = 1;
	  		$last = 0;
	  		$auxi = "";
			while ($last < $consulta->cantidad() && ($consulta->campo('EDAD_MENSAJE',$last)>=255
												 || $consulta->campo('EDAD_MENSAJE',$last) < 0
												 || $consulta->campo('LATITUD',$last) == '0'
												 || $consulta->campo('LONGITUD',$last) == '0')){
				$last++;
			}
			$LOGGER->addLine('ERROR', ' Calculando Distancia:: ');
	      	for($i=$last; $i<$consulta->cantidad(); $i++){
				if ($consulta->campo('EDAD_MENSAJE',$i)>=255
					|| $consulta->campo('EDAD_MENSAJE',$i) < 0
					|| $consulta->campo('LATITUD',$i) == '0'
					|| $consulta->campo('LONGITUD',$i) == '0')
					{
						continue;
					}
      			$lat1 = quitCero($consulta->campo('LATITUD',$last));
      			$lon1 = quitCero($consulta->campo('LONGITUD',$last));
   				$lat2 = quitCero($consulta->campo('LATITUD',$i));
   				$lon2 = quitCero($consulta->campo('LONGITUD',$i));
      			/*Pitagoras*/
      			/*$aux = sqrt(pow($lat1 - $lat2, 2) + pow($lon1 - $lon2, 2));
      			$aux = $aux * 100;
      			$aux = round($aux, 4);
      			$result = $result + $aux;*/
      			//$auxi .= "<br>" . $lat1 . " ," . $lon1 ." | " . $lat2 . " , " .$lon2 ." -----> ". $aux;
      			//$last = $i;
      			/*Curvatura*/
      			$dLat = ($lat1-$lat2) * (pi() / 180);
      			$dLon = ($lon1-$lon2) * (pi() / 180);
      			$a = pow(sin($dLat/2),2) +
      			 	cos($lat1 * pi()/180) * cos($lat2 * pi()/180) *
      			 	pow(sin($dLon/2),2);
      			$c = 2 * atan2(sqrt($a), sqrt(1-$a));
      			$aux = $R * $c;

      			$velocidadI = intval($consulta->campo('VELOCIDAD',$i));
      			$velocidadLast = intval($consulta->campo('VELOCIDAD',$last));
/*
      			if ($aux < 0.3 && ($velocidadI < 10 || $velocidadLast < 10)) {
      				$LOGGER->addLine('DEBUG', ' DiferenciaEntrePunto ' . $last . ' y punto ' . $aux . ' = ' . $aux . ' **** Vel1 = ' . $velocidadLast . ' **** vel2 = ' . $velocidadI);
					$LOGGER->addLine('DEBUG', ' Se descarta punto ' . $i);
      			} else {
      				$LOGGER->addLine('DEBUG', ' No se descarta ' . $last . ' y punto ' . $aux . ' = ' . $aux . ' **** Vel1 = ' . $velocidadLast . ' **** vel2 = ' . $velocidadI);
      				$result = $result + $aux;
      			}
      			*/
      			$result = $result + $aux;
      			$last = $i;
      			$totalPuntos++;

      		}
      	}
      	//return $auxi;
	    //$result = $result * 100;
	    $result = round($result, 3);
	    $resultString = (string) $result;
	    $resultString = str_ireplace(".", ",", $resultString);
	    //$result = substr($result, 0, strpos($result, ',')+4);
	    return $resultString;
    }
    /**********************************************************************/
    function calcularDistancia($consulta, $i){
      $result = 0;
      $lat1 = quitCero($consulta->campo('LATITUD',$i));
      $lon1 = quitCero($consulta->campo('LONGITUD',$i));
      $lat2 = quitCero($consulta->campo('LATITUD',$i + 1));
      $lon2 = quitCero($consulta->campo('LONGITUD',$i + 1));
      $aux 	= sqrt(pow($lat1 - $lat2, 2) + pow($lon1 - $lon2, 2));
      $result = $result + $aux;
      $result = $result * 100;
      $result = str_replace(".", ",", substr($result, 0, strpos($result, '.')+4));
      return $result;
    }
    /**********************************************************************/
    function Consulta_Datos_Identificacion_Avl($order_id){
		global $LOGGER;
    	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Datos_Identificacion_Avl' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
        $SQL = "call z_Consulta_Datos_Identificacion_Avl('$order_id')";
        if (!$mysqli->real_query($SQL)){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Datos_Identificacion_Avl' " . $mysqli->error.' CONSULTA: '.$SQL );
           	exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Imagen_Avl($order_id){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Imagen_Avl' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }

        $SQL = "call z_Obtener_Imagen_Avl('$order_id')";
        if (!$mysqli->real_query($SQL)){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Imagen_Avl' " . $mysqli->error.' CONSULTA: '.$SQL );
           	exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_PosicionSeleccionada_Avl($order_id, $tabla){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_PosicionSeleccionada_Avl' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }

        $SQL = "call Consulta_PosicionSeleccionada_Avl('$order_id','$tabla')";
        if (!$mysqli->real_query($SQL)){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_PosicionSeleccionada_Avl' " .  $mysqli->error.' CONSULTA: '.$SQL );
           	exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_PosicionActual_Avl($order_ids){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_PosicionActual_Avl' " .  mysqli_connect_error() );
          	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
        $SQL = "SELECT ps.ORDER_RL as idMovil,
					   ps.APROXIMACION as direccion,
              		   ps.LATITUD as latitud,
              		   ps.LONGITUD as longitud,
                       ps.SENTIDO as sentido,
              		   ps.VELOCIDAD as velocidad,
              		   ps.SATELITES as satelites,
                       ps.EVENTO as evento,
              		   ps.EVENTO_DETALLE as eventoDetalle,
                       ps.EDAD_MENSAJE as validez,
              		   ps.FECHA_MENSAJE as fechaMensaje,
              		   #ps.STATUS_ZONA as statusZona,
              		   ps.ODOMETRO_PARCIAL as odometroParcial,
              		   ps.ODOMETRO_TOTAL as odometroTotal,
              		   ps.REVOLUCIONES as rpm,
        			   ps.CONTACTO as contacto,
        			   ps.ALIMENTACION as alimentacion,
        			   ps.BAT1 as bateriaPrincipal,
        			   ps.BAT2 as bateriaSecundaria,
              		   #poma.NOMBRE as zonaProhibida,
              		   ps.DIGITALES as digitales,
              		   tima.ORDER_ID as zonaHorariaId,
              		   tima.HORAS as horas,
              		   tima.TIPO as signoHoras,
              		   abrlCaudalimetro.ORDER_ID as controlaCaudalimetro,
              		   abrlTemperaturaMotor.ORDER_ID as controlaTemperaturaMotor,
              		   abrlTemperaturaCarga.ORDER_ID as controlaTemperaturaCarga,
              		   abrlTanqueNafta.ORDER_ID as controlaTanqueNafta
                 from bykom.posi_actual ps
                 INNER JOIN wc.abmacodigos abma on abma.ORDER_ID = ps.ORDER_RL
                 LEFT JOIN wc.timazonesids tima on tima.ORDER_ID = abma.TIMEZONEID
                 #LEFT JOIN wc.pomapoligonos poma on poma.ORDER_ID = ps.ID_ZONA
                 LEFT JOIN wc.abrlsensores abrlCaudalimetro on (abrlCaudalimetro.ORDER_RL = abma.ORDER_ID AND abrlCaudalimetro.TIPO = 3)
                 LEFT JOIN wc.abrlsensores abrlTemperaturaMotor on (abrlTemperaturaMotor.ORDER_RL = abma.ORDER_ID AND abrlTemperaturaMotor.TIPO = 15)
                 LEFT JOIN wc.abrlsensores abrlTemperaturaCarga on (abrlTemperaturaCarga.ORDER_RL = abma.ORDER_ID AND abrlTemperaturaCarga.TIPO = 16)
                 LEFT JOIN wc.abrlsensores abrlTanqueNafta on (abrlTanqueNafta.ORDER_RL = abma.ORDER_ID AND abrlTanqueNafta.TIPO = 4)
              	 where ps.ORDER_RL IN (".$order_ids.")";
        $LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
        if (!$mysqli->real_query($SQL)){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_PosicionActual_Avl' " .  $mysqli->error.' CONSULTA: '.$SQL );
           	exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Historico_Avl($order_id,$fechaInicio,$fechaFin,$iniPaginacion,$contar, $contar2){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
        $SQL = "call z_genera_reporte_wab('$fechaInicio','$fechaFin','$order_id',".RESULTADO_HISTORICO_AVL.",'$iniPaginacion','$contar','$contar2')";
        if (!$mysqli->real_query($SQL)){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl' " .  $mysqli->error.' CONSULTA: '.$SQL );
           	exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Historico_Avl_QCeros($order_id,$fechaInicio,$fechaFin,$iniPaginacion,$contar, $contar2){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl_QCeros' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
        ini_set('memory_limit','1024M');
        $SQL = "call z_genera_reporte_wab_qceros('$fechaInicio','$fechaFin','$order_id',".RESULTADO_HISTORICO_AVL.",'$iniPaginacion','$contar','$contar2')";
        if (!$mysqli->real_query($SQL)){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl_QCeros' " .  $mysqli->error.' CONSULTA: '.$SQL );
           	exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Historico_Avl_Total($order_id,$fechaInicio,$fechaFin){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl_Total' " .  mysqli_connect_error() );
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }
        ini_set('memory_limit','1024M');
        $SQL = "call z_genera_reporte_wab('$fechaInicio','$fechaFin','$order_id',90000,'0','0','0')";
        if (!$mysqli->real_query($SQL)){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl_Total' " .  $mysqli->error.' CONSULTA: '.$SQL );
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
   function Consulta_Historico_Avl_Total_Test($order_id,$fechaIni,$fechafin,$ddeRecord,$limit,$filtrarCero,$filtroEdad = false){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl_Total_Test' " .  mysqli_connect_error() );
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $vFecha  = explode("-",$fechaIni);
    	$mesIni  = $vFecha[1];
    	$anioIni = $vFecha[0];
    	$vFechaFin  = explode("-",$fechafin);
    	$mesFin  = $vFechaFin[1];
    	$anioFin = $vFechaFin[0];
		$UNION 		= "";
		$querySQL 	= "";
		$sigo  		= true;
		while( $sigo ){
			$anio 	= substr($anioIni,-2);
			$sMesIni = $mesIni;
			if(strlen($mesIni)==1){
				$sMesIni = "0".$mesIni;
			}
			$nombreTablaAvl = "historico_avl_" . $anio . $sMesIni;

			$querySQL .= $UNION;
        	$querySQL .= "SELECT
	        		hist.ORDER_ID,
	        		hist.ORDER_RL,
	        		hist.LONGITUD,
	        		hist.LATITUD,
	        		hist.VELOCIDAD,
	        		hist.SENTIDO,
	        		hist.SATELITES,
	        		hist.APROXIMACION,
	        		hist.EVENTO,
	        		hist.FECHA_MENSAJE,
	        		hist.FECHA_RECIBIDO,
	        		hist.STATUS_ZONA,
	        		hist.EDAD_MENSAJE,
	        		hist.SOLO_LOGISTICA,
	        		hist.CODIGOALFA,
	        		hist.ODOMETRO_TOTAL,
	        		hist.CONTACTO,
	        		hist.ALIMENTACION,
	        		hist.CAUDALIMETRO,
	        		hist.FECHA_GMT,
	        		alma.NOMBRE as COD_ALFA,
	        		CASE (hist.SOLO_LOGISTICA) WHEN true THEN 1 ELSE 0 END as SOLO_LOGISTICA2,
	        		pomapoligonos.nombre AS ZONA
	        		FROM $nombreTablaAvl as hist
	        		LEFT OUTER JOIN wc.pomapoligonos ON hist.id_zona = pomapoligonos.order_id
	        		LEFT JOIN wc.almacodigos alma ON alma.CODIGOALFA = hist.CODIGOALFA
	        		WHERE hist.ORDER_RL = $order_id
	        		AND hist.FECHA_MENSAJE BETWEEN  '$fechaIni'  AND '$fechafin' ";
	        		if($filtroEdad){
	        			$querySQL .= " AND hist.EDAD_MENSAJE BETWEEN 0 AND 254 ";
					}
        	if($filtrarCero){
        		$querySQL .= " AND VELOCIDAD <> '000' AND VELOCIDAD <> '0' AND VELOCIDAD <> '00' ";
        	}

        	if($mesIni == $mesFin && $anioIni == $anioFin){
				$sigo = false;
			}
			$mesIni++;
			if ($mesIni == 13){
				$mesIni = 1;
				$anioIni++;
			}
			$UNION = " UNION ";
    	}
		$querySQL .= " ORDER BY FECHA_GMT ASC"; //haciendo un Order by la consulta demora mucho mas tiempo
		if($limit!=""){
			$querySQL .= " LIMIT $ddeRecord, $limit";
		}
        ini_set('memory_limit','1024M');
		if (!$mysqli->real_query($querySQL)){
			$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl_Total_Test' " . $mysqli->error.' CONSULTA: '.$querySQL );
           	exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Historico_Avl_Total_QCeros($order_id,$fechaInicio,$fechaFin){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl_Total_QCeros' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
        $SQL = "call z_genera_reporte_wab_qceros('$fechaInicio','$fechaFin','$order_id',90000,'0','0','0')";
        ini_set('memory_limit','1024M');
        if (!$mysqli->real_query($SQL)){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl_Total_QCeros' " .  $mysqli->error.' CONSULTA: '.$SQL );
           	exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Evento($cuenta, $fechai, $fechaf, $limitacion, $tipo, $iniPaginacion, $contar){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Evento' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
//		$SQL = "call z_consulta_evento_bis('$cuenta','$fechai','$fechaf','$limitacion','$tipo',".RESULTADO_EVENTOS.",'$iniPaginacion','$contar')";
		// TOMAMOS "DETALLE", "FECHAHORA", "ZONA-USUARIO" Y "CODIGOALFA" DE LOS EVENTOS
		$SQL = "	SELECT
							abma.`nombre` AS `Nombre`,
							abma.`nombre_dos` AS `NombreDos`,
							abma.`AVL_PATENTE` AS `Patente`,
							EVMA.order_rl AS `idMovil`,
							EVMA.`DETALLE` AS `Detalle`,
							EVMA.`FECHAHORA` AS `FECHA MENSAJE`,
							EVMA.`ZON_US` AS `Zona-Usuario`,
							ALMA.`CODIGOALFA` AS `Evento`
					FROM `evmahistorico` EVMA
					JOIN abmacodigos abma on abma.ORDER_ID = EVMA.order_rl
					INNER JOIN `almacodigos` ALMA
						ON EVMA.`EVENTO` = ALMA.`ORDER_ID`
					WHERE EVMA.order_rl IN (". $cuenta .")
						AND ( EVMA.fechahora BETWEEN '". $fechai ."' AND '". $fechaf ."' )
						AND ALMA.ver_web = TRUE	";

		// APLICAMOS EL FILTRO DE TIPO DE EVENTOS
		switch( $tipo ){
			case 0:	// TODOS
				break;
			case 1:	// EMERGENCIAS
				$SQL .= "	AND ALMA.tipo_senial IN (3, 5, 6)	";
				break;
			case 2:	// NO EMERGENCIAS
				$SQL .= "	AND ALMA.tipo_senial IN (2, 7, 8, 9)	";
				break;
			case 3:	// APERTURAS Y CIERRES
				$SQL .= "	AND ALMA.tipo_senial IN (1, 4)	";
				break;
		}

		$SQL .= "	ORDER BY EVMA.`fechahora` DESC
                    LIMIT ". $iniPaginacion .", ". $limitacion;

		if (!$mysqli->real_query($SQL)){
			$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Evento' " .  $mysqli->error.' CONSULTA: '.$SQL);
			exit();
		}
		return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Evento_Total($cuenta,$fechai,$fechaf,$limitacion,$tipo,$iniPaginacion,$contar){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Evento_Total' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
     	$SQL = "call z_consulta_evento_bis('$cuenta','$fechai','$fechaf','$limitacion','$tipo',2000,'$iniPaginacion','$contar')";
     	if (!$mysqli->real_query($SQL)){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Evento_Total' " .   $mysqli->error.' CONSULTA: '.$SQL );
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Zonas($cuenta,$iniPaginacion,$contar){
		global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
   		if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Zonas' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
     	$SQL = "select abrl.ORDER_ID " .
            " from abrlzonas abrl " .
            " where abrl.ORDER_RL= " . $cuenta .
            " and abrl.NUMERO <> 0 and not isnull(abrl.NUMERO) ";

     	$LOGGER->addLine('DEBUG', ' CONSULTA TIPO ZONAS: '.$SQL);
     	if (!$mysqli->multi_query($SQL)) {
     		$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Zonas' " .   $mysqli->error.' CONSULTA: '.$SQL );
      		exit();
     	}

		$filtrarCeros = "";
	    $resultado = BykomCliente::getResultado($mysqli);
	    if ($resultado->cantidad() > 0) {
	     	$filtrarCeros = " and (abrl.NUMERO <> 0 and not isnull(abrl.NUMERO)) ";
	    }

		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Zonas' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
	    $SQL = "select abrl.N_zona as Zona, " .
	                   "abrl.Nombre, " .
	                   "alma.codigoAlfa as Codigo, " .
	                   "SUBSTRING(abrl.datos01,1,70) as Observaciones " .
	            " from abrlzonas abrl " .
	            " inner join almacodigos alma ON abrl.TIPOSENIAL = alma.order_id " .
	            " where abrl.ORDER_RL= " . $cuenta .
	            $filtrarCeros .
	            " order by abrl.N_ZONA";
	    $LOGGER->addLine('DEBUG', 'CONSULTA ZONAS: '.$SQL);
	    if (!$mysqli->multi_query($SQL)){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Zonas' " .   $mysqli->error.' CONSULTA: '.$SQL );
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Zonas_Total($cuenta,$iniPaginacion,$contar){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Zonas_Total' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
     	$SQL = "call z_consulta_Zona('$cuenta','$iniPaginacion',2000,'$contar')";
     	if (!$mysqli->multi_query($SQL)){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Zonas_Total' " .   $mysqli->error.' CONSULTA: '.$SQL );
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function Consulta_Usuarios($cuenta,$iniPaginacion,$contar){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Usuarios' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
     	$SQL = "call z_consulta_Usuario('$cuenta','$iniPaginacion',".RESULTADO_USUARIOS.",'$contar')";
     	$LOGGER->addLine('DEBUG', 'CONSULTA Consulta_Usuarios : '.$SQL);
     	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Usuarios' " . $mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
  function Consulta_Usuarios_Total($cuenta,$iniPaginacion,$contar){
	 global $LOGGER;
     $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
 	 if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Usuarios_Total' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
     }
     $SQL = "call z_consulta_Usuario('$cuenta','$iniPaginacion',2000,'$contar')";
     if (!$mysqli->real_query($SQL)){
      	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Usuarios_Total' " . $mysqli->error.' CONSULTA: '.$SQL);
      	exit();
     }
     return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
    function Consulta_Contactos($cuenta){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Contactos' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
     	}
	    //$SQL = "call z_consulta_Contacto('$cuenta','$iniPaginacion',".RESULTADO_CONTACTOS.",'$contar')";
	    $SQL = "select ConcatenarNombre(tlmapersonas.NOMBRE,tlmapersonas.NOMBRE_DOS) as Nombre, " .
               " MascaraTelefono(CAST(ciudad.caratelefo as CHAR),CAST( tlrlpersonas.telefono as CHAR)) as Telefono, " .
               " ELT(tlrlpersonas.tipotelefono, 'Particular', 'Laboral','Celular','Mensaje de Texto a Celular') as Tipo, " .
               " ELT(abrltelefonos.tiene_llave+1,'NO','SI') as Llave, " .
               " ELT(abrltelefonos.vive_cerca+1,'NO','SI') as Cerca, " .
               " tlrlpersonas.datos01 as Observaciones " .
               " from abrltelefonos,tlmapersonas,tlrlpersonas,ciudad " .
           " where abrltelefonos.codigo_id=tlmapersonas.order_id " .
           " and tlrlpersonas.order_rl=tlmapersonas.order_id " .
           " and tlrlpersonas.areacode=ciudad.codigociud " .
           " and abrltelefonos.order_rl= " . $cuenta .
           " and (tlrlpersonas.tipotelefono <> 8 and tlrlpersonas.tipotelefono <> 9 and tlrlpersonas.tipotelefono <> 10) " .
           " order by abrltelefonos.orden,tlrlpersonas.orden";
    	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Contactos' " . $mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
    function Consulta_Contactos_Total($cuenta,$iniPaginacion,$contar){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Contactos_Total' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
     	}
     	$SQL = "call z_consulta_Contacto('$cuenta','$iniPaginacion',2000,'$contar')";
     	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Contactos_Total' " . $mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
  function InfoCuentaAvl($cuentaId){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
  		if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'InfoCuentaAvl' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
    	}
    	//$SQL = "call z_consulta_InfoCuenta('$cuenta')";
    	$SQL = "select
      	 	ConcatenarDireccion(
                   Barrio.nombre,
                   calles.`nombre`,
                   CalleEntre.nombre,
                   CalleY.nombre,
                   cast(abmacodigos.`NUMERO` as char),
                   abmacodigos.`PISO`,
                   abmacodigos.`DPTO`,
                   CiudadX.nombre,
                   CiudadX.provincia,
                   CiudadX.pais,
                   abmacodigos.`CODPOSTAL1`,
                   cast(abmacodigos.`codpostal2`as char),
                   abmacodigos.`CODPOSTAL3`,
                   cast(CiudadX.caratelefo as char),
                   abmacodigos.`PANEL_TEL`
                                  )AS dirMonitoreo,
               ConcatenarDireccion(
                   BarrioPago.nombre,
                   CallePago.`nombre`,
                   null,
                   null,
                   cast(abmacodigos.`NUMERO_PAGO` as char),
                   abmacodigos.`PISO_PAGO`,
                   abmacodigos.`DPTO_PAGO`,
                   CiudadXPago.nombre,
                   CiudadXPago.provincia,
                   CiudadXPago.pais,
                   abmacodigos.`CODPOSTAL1_PAGO`,
                   cast(abmacodigos.`CODPOSTAL2_PAGO` as char),
                   abmacodigos.`CODPOSTAL3_PAGO`,
                   null,
                   null
                                 )AS dirPostal,
               TComercio.`nombre` as TComercio,
               TCategoria.nombre as TCategoria ,
               cast(date_format(`abmacodigos`.`AB_ALTA`,'%d/%m/%y') as char) as FechaActivacion,
               elt(abmacodigos.`ENVIAMOVIL`+1,'NO','SI') as EnvMovil,
               elt(abmacodigos.`CONTROLHOR`+1,'NO','ACTIVO') as ControlaHorarios,
               elt(abmacodigos.`VIDEO`+1,'NO','ACTIVO') as Video,
               elt(abmacodigos.`CARTEL`+1,'NO','SI') as Cartel,
               elt(abmacodigos.`AUDIO_DV`+1,'NO','ACTIVO') as Audio,
               abmacodigos.`ENSERVICIO` as Enservicio,
               Estado.Estado as Estado,
               concat(date_format(Estado.ult_dt,'%d/%m/%y %H:%i:%s'),' - ', EstadoCodigo.`CODIGOALFA`,' - ',Estado.ult_dato) as USR, ";

               if (BYKOM_DB_TYPE == 0) {
               	  $SQL .= "Correo.email as CorreoInterno, ";
               	  $SQL .= "ENVReportes.`email` as CorreoReportes, ";
               } else {
                  $SQL .= "abmacodigos.EMAIL_ENV as CorreoInterno, ";
                  $SQL .= "abmacodigos.CODIGOEMAI as CorreoReportes, ";
               }

               $SQL .= "elt(abmacodigos.`AB_TIPADJ`,'\nMicrosoft World','PDF','Texto Plano') as TipoAdjunto,
               rtrim(abmacodigos.ref_domi_m) as Observaciones_m,
               rtrim(abmacodigos.ref_domi_p) as Observaciones_p
               from abmacodigos left join calles on abmacodigos.`CALLE`=calles.`order_id`
                                left join calles as CalleEntre
                                        on CalleEntre.order_id=abmacodigos.`CALLE_ENT1`
                                left join calles as CalleY
                                        on CalleY.order_id=abmacodigos.`CALLE_ENT2`
                                left join calles as CallePago
                                        on CallePago.order_id=abmacodigos.`CALLE_PAGO`
                                left join barrios as Barrio
                                        on abmacodigos.codigobarr=Barrio.codigobarr
                                left join  barrios as BarrioPago
                                        on abmacodigos.`BARRIO`=BarrioPago.codigobarr
                                left join ciudad as CiudadX
                                        on abmacodigos.`CODIGOCIUD`=CiudadX.codigociud
                                left join ciudad as CiudadXPago
                                        on abmacodigos.`CIUD_PAGO`=CiudadXPago.codigociud
                                left join abrltipocategoria as TCategoria
                                        on abmacodigos.`CODIGOCATE`=TCategoria.CODIGOCATE
                                left join abrltipocomercio as TComercio
                                        on abmacodigos.`CODIGOCOM`=TComercio.`codigocom`
                                left join  abrlestados as Estado
                                        on abmacodigos.`ORDER_ID`=Estado.`order_rl`
                                left join almacodigos as EstadoCodigo
                                        on Estado.ult_codigo=EstadoCodigo.`ORDER_ID`
                                left join internet_email as ENVReportes
                                        on abmacodigos.`EMAIL_ENV`=ENVReportes.codigoemai
                                left join internet_email as Correo
                                        on abmacodigos.`CODIGOEMAI`=Correo.codigoemai
               where abmacodigos.order_id= " . $cuentaId;
     	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'InfoCuentaAvl' " . $mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
	function InfoCuentaAvlOid($cuentaId){
		global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
  		if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'InfoCuentaAvlOid' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
    	}
     	//$SQL = "call z_consulta_InfoCuenta_Avl_Oid('$cuenta')";
	 	$SQL = "select
			   ' ' AS dirMonitoreo,
               ConcatenarDireccion(
                   BarrioPago.nombre,
                   CallePago.`nombre`,
                   null,
                   null,
                   cast(abmacodigos.`NUMERO_PAGO` as char),
                   abmacodigos.`PISO_PAGO`,
                   abmacodigos.`DPTO_PAGO`,
                   CiudadXPago.nombre,
                   CiudadXPago.provincia,
                   CiudadXPago.pais,
                   abmacodigos.`CODPOSTAL1_PAGO`,
                   cast(abmacodigos.`CODPOSTAL2_PAGO` as char),
                   abmacodigos.`CODPOSTAL3_PAGO`,
                   null,
                   null
                                 )AS dirPostal,
               TComercio.`nombre` as TComercio,
               TCategoria.nombre as TCategoria ,
               cast(date_format(`abmacodigos`.`AB_ALTA`,'%d/%m/%y') as char) as FechaActivacion,
               elt(abmacodigos.`ENVIAMOVIL`+1,'NO','SI') as EnvMovil,
               elt(abmacodigos.`CONTROLHOR`+1,'NO','ACTIVO') as ControlaHorarios,
               elt(abmacodigos.`VIDEO`+1,'NO','ACTIVO') as Video,
               elt(abmacodigos.`CARTEL`+1,'NO','SI') as Cartel,
               elt(abmacodigos.`AUDIO_DV`+1,'NO','ACTIVO') as Audio,
               abmacodigos.`ENSERVICIO` as Enservicio,
               Estado.Estado as Estado,
               concat(date_format(Estado.ult_dt,'%d/%m/%y %H:%i:%s'),' - ', EstadoCodigo.`CODIGOALFA`,' - ',Estado.ult_dato) as 'USR', ";

               if (BYKOM_DB_TYPE == 0) {
               	  $SQL .= "Correo.email as CorreoInterno, ";
               	  $SQL .= "ENVReportes.`email` as CorreoReportes, ";
               } else {
                  $SQL .= "abmacodigos.EMAIL_ENV as CorreoInterno, ";
                  $SQL .= "abmacodigos.CODIGOEMAI as CorreoReportes, ";
               }

               $SQL .= "elt(abmacodigos.`AB_TIPADJ`,'\nMicrosoft World','PDF','Texto Plano') as TipoAdjunto,
               rtrim(abmacodigos.ref_domi_m) as Observaciones_m,
               rtrim(abmacodigos.ref_domi_p) as Observaciones_p,
               rtrim(abmacodigos.`AVL_ANIO`) as Anio,
               rtrim(abmacodigos.`AVL_COLOR`) as Color,
               rtrim(abmacodigos.`AVL_IDENTIFICADOR`) as Identificador,
               rtrim(abmacodigos.`AVL_MARCA`) as Marca,
               RTRIM(`abmacodigos`.`AVL_MODELO`) as Modelo,
               RTRIM(`abmacodigos`.`AVL_PATENTE`) as Patente,
               RTRIM(PosiActual.`APROXIMACION`) as Aproximacion,
               RTRIM(TipoAvl.imagen) as Imagen
               from abmacodigos left join calles on abmacodigos.`CALLE`=calles.`order_id`
                                left join calles as CalleEntre
                                        on CalleEntre.order_id=abmacodigos.`CALLE_ENT1`
                                left join calles as CalleY
                                        on CalleY.order_id=abmacodigos.`CALLE_ENT2`
                                left join calles as CallePago
                                        on CallePago.order_id=abmacodigos.`CALLE_PAGO`
                                left join barrios as Barrio
                                        on abmacodigos.codigobarr=Barrio.codigobarr
                                left join  barrios as BarrioPago
                                        on abmacodigos.`BARRIO`=BarrioPago.codigobarr
                                left join ciudad as CiudadX
                                        on abmacodigos.`CODIGOCIUD`=CiudadX.codigociud
                                left join ciudad as CiudadXPago
                                        on abmacodigos.`CIUD_PAGO`=CiudadXPago.codigociud
                                left join abrltipocategoria as TCategoria
                                        on abmacodigos.`CODIGOCATE`=TCategoria.CODIGOCATE
                                left join abrltipocomercio as TComercio
                                        on abmacodigos.`CODIGOCOM`=TComercio.`codigocom`
                                left join  abrlestados as Estado
                                        on abmacodigos.`ORDER_ID`=Estado.`order_rl`
                                left join almacodigos as EstadoCodigo
                                        on Estado.ult_codigo=EstadoCodigo.`ORDER_ID`
                                left join internet_email as ENVReportes
                                        on abmacodigos.`EMAIL_ENV`=ENVReportes.codigoemai
                                left join internet_email as Correo
                                        on abmacodigos.`CODIGOEMAI`=Correo.codigoemai
                                LEFT JOIN `posi_actual` as PosiActual
                                        on `abmacodigos`.`ORDER_ID` = PosiActual.`ORDER_RL`
                                LEFT JOIN `abrltipoavl` as TipoAvl
                                        on `abmacodigos`.`AVL_TIPO` = TipoAvl.`ORDER_ID`
               where abmacodigos.order_id=" . $cuentaId;

     	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'InfoCuentaAvlOid' " . $mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
	}
 /**********************************************************************/
	function InfoCuenta($cuenta){
		global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'InfoCuenta' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
    	}
     	//$SQL = "call z_consulta_InfoCuenta('$cuenta')";
     	$SQL = "select
       			ConcatenarDireccion(
                   Barrio.nombre,
                   calles.`nombre`,
                   CalleEntre.nombre,
                   CalleY.nombre,
                   cast(abmacodigos.`NUMERO` as char),
                   abmacodigos.`PISO`,
                   abmacodigos.`DPTO`,
                   CiudadX.nombre,
                   CiudadX.provincia,
                   CiudadX.pais,
                   abmacodigos.`CODPOSTAL1`,
                   cast(abmacodigos.`codpostal2`as char),
                   abmacodigos.`CODPOSTAL3`,
                   cast(CiudadX.caratelefo as char),
                   abmacodigos.`PANEL_TEL`
                                  )AS dirMonitoreo,
               ConcatenarDireccion(
                   BarrioPago.nombre,
                   CallePago.`nombre`,
                   null,
                   null,
                   cast(abmacodigos.`NUMERO_PAGO` as char),
                   abmacodigos.`PISO_PAGO`,
                   abmacodigos.`DPTO_PAGO`,
                   CiudadXPago.nombre,
                   CiudadXPago.provincia,
                   CiudadXPago.pais,
                   abmacodigos.`CODPOSTAL1_PAGO`,
                   cast(abmacodigos.`CODPOSTAL2_PAGO` as char),
                   abmacodigos.`CODPOSTAL3_PAGO`,
                   null,
                   null
                                 )AS dirPostal,
               TComercio.`nombre` as 'TComercio',
               TCategoria.nombre as 'TCategoria' ,
               cast(date_format(`abmacodigos`.`AB_ALTA`,'%d/%m/%y') as char) as 'FechaActivacion',
               elt(abmacodigos.`ENVIAMOVIL`+1,'NO','SI') as 'EnvMovil',
               elt(abmacodigos.`CONTROLHOR`+1,'NO','ACTIVO') as 'ControlaHorarios',
               elt(abmacodigos.`VIDEO`+1,'NO','ACTIVO') as 'Video',
               elt(abmacodigos.`CARTEL`+1,'NO','SI') as 'Cartel',
               elt(abmacodigos.`AUDIO_DV`+1,'NO','ACTIVO') as 'Audio',
               abmacodigos.`ENSERVICIO` as 'Enservicio',
               Estado.estado as 'Estado',
               concat(date_format(Estado.ult_dt,'%d/%m/%y %H:%i:%s'),' - ', EstadoCodigo.`CODIGOALFA`,' - ',Estado.ult_dato) as 'USR',
               Correo.email as 'CorreoInterno',
               ENVReportes.`email` as 'CorreoReportes',
               elt(abmacodigos.`AB_TIPADJ`,'\nMicrosoft World','PDF','Texto Plano') as 'TipoAdjunto',
               rtrim(abmacodigos.ref_domi_m) as 'Observaciones_m',
               rtrim(abmacodigos.ref_domi_p) as 'Observaciones_p'
               from abmacodigos left join calles on abmacodigos.`CALLE`=calles.`order_id`
                                left join calles as CalleEntre
                                        on CalleEntre.order_id=abmacodigos.`CALLE_ENT1`
                                left join calles as CalleY
                                        on CalleY.order_id=abmacodigos.`CALLE_ENT2`
                                left join calles as CallePago
                                        on CallePago.order_id=abmacodigos.`CALLE_PAGO`
                                left join barrios as Barrio
                                        on abmacodigos.codigobarr=Barrio.codigobarr
                                left join  barrios as BarrioPago
                                        on abmacodigos.`BARRIO`=BarrioPago.codigobarr
                                left join ciudad as CiudadX
                                        on abmacodigos.`CODIGOCIUD`=CiudadX.codigociud
                                left join ciudad as CiudadXPago
                                        on abmacodigos.`CIUD_PAGO`=CiudadXPago.codigociud
                                left join abrltipocategoria as TCategoria
                                        on abmacodigos.`CODIGOCATE`=TCategoria.CODIGOCATE
                                left join abrltipocomercio as TComercio
                                        on abmacodigos.`CODIGOCOM`=TComercio.`codigocom`
                                left join  abrlestados as Estado
                                        on abmacodigos.`ORDER_ID`=Estado.`order_rl`
                                left join almacodigos as EstadoCodigo
                                        on Estado.ult_codigo=EstadoCodigo.`ORDER_ID`
                                left join internet_email as ENVReportes
                                        on abmacodigos.`EMAIL_ENV`=ENVReportes.codigoemai
                                left join internet_email as Correo
                                        on abmacodigos.`CODIGOEMAI`=Correo.codigoemai
               where abmacodigos.ORDER_ID= $cuenta";
      	$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA INFO CUENTA: '.$SQL);
     	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'InfoCuenta' " .$mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /*********************************************************************/
    function InfoDatosCuenta($cuenta,$objetivo){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'InfoDatosCuenta' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
    	}
	    switch($objetivo){
	     	case 2: $tabla = 'ambacodigos';
	     			break;
	     	case 3: $tabla = 'tlmapersonas';
	     			break;
	    }
	    $SQL = "select * from `$tabla` t where t.`ORDER_ID` ='$cuenta'";
	    if (!$mysqli->real_query($SQL)){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'InfoDatosCuenta' " . $mysqli->error.' CONSULTA: '.$SQL);
	     	exit();
	    }
	    return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    function Grupos_Moviles($flotaId){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Grupos_Moviles' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "SELECT * FROM grupomovil WHERE grupomovil.`FLOTA_ID` = $flotaId";
     	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR',"FUNCION: 'Grupos_Moviles' " . $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
	/**********************************************************************/
    function Grupos_Moviles_Dealers($cuenta){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Grupos_Moviles_Dealers' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "select ABMA.`FLOTA_ID` as ORDER_ID,
       				TLMA.`NOMBRE` as NOMBRE,
      				TLMA.`DATOS01` as DATOS
			 from `dealer_cuenta` D_Cta
			 inner join abmacodigos as ABMA on ABMA.`ORDER_ID` = D_Cta.`cuentaFk`
			 inner join tlmapersonas as TLMA on TLMA.`ORDER_ID` = ABMA.`FLOTA_ID`
			 where D_Cta.`dealerFk` = ".$cuenta." and
      			   (isnull(D_Cta.`caduca`) or D_Cta.`caduca` >= now()) ";
	 	$SQL.= "UNION
			 select ABMA.`FLOTA_ID` as ORDER_ID,
		    		TLMA.`NOMBRE` as NOMBRE,
			        TLMA.`DATOS01` as DATOS
			 from `dealer_rc` D_Rc
			 inner join abmacodigos as ABMA on ABMA.`ID_RC` = D_Rc.`empresaFk`
			 inner join tlmapersonas as TLMA on TLMA.`ORDER_ID` = ABMA.`FLOTA_ID`
			 where D_Rc.`dealerFk` = ".$cuenta." and
			       (isnull(D_Rc.`caduca`) or D_Rc.`caduca` >= now()) ";
	 	$SQL.= "UNION
			 select ABMA.`FLOTA_ID` as ORDER_ID,
			        TLMA.`NOMBRE` as NOMBRE,
			        TLMA.`DATOS01` as DATOS
			 from `dealer_flota` D_Flota
			 inner join abmacodigos as ABMA on ABMA.`FLOTA_ID` = D_Flota.`flotaFk`
			 inner join tlmapersonas as TLMA on TLMA.`ORDER_ID` = ABMA.`FLOTA_ID`
			 where D_Flota.`dealerFk` = ".$cuenta." and
				   (isnull(D_Flota.`caduca`) or D_Flota.`caduca` >= now())
			 ORDER BY ORDER_ID ";

     	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR',"FUNCION: 'Grupos_Moviles_Dealers' " .  $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
 	/**********************************************************************/
    function InfoCuentaReduce($cuenta){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'InfoCuentaReduce' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "call z_Consulta_InfoCuentaReduce('$cuenta')";
     	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'InfoCuentaReduce' " .$mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
 	/**********************************************************************/
    function HorariosCuenta($cuenta){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if(mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'HorariosCuenta' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "call z_Consulta_HorariosCuenta('$cuenta')";
     	if(!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'HorariosCuenta' " . $mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
 /**********************************************************************/
    function HorariosCuenta_Ex($cuenta){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if(mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'HorariosCuenta_Ex' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "call z_Consulta_HorariosCuenta_Ex('$cuenta')";
     	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'HorariosCuenta_Ex' " . $mysqli->error.' CONSULTA: '.$SQL);
     	 	exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
    function HorariosTolerancia($cuenta){
	 	global $LOGGER;
     	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
    	if(mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'HorariosTolerancia' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "call z_Consulta_HorariosTolerancia('$cuenta')";
     	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'HorariosTolerancia' " . $mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
/**********************************************************************/
 	function RecordarPassword($codigorc,$codigocuenta,$particion,$mail){
 		global $LOGGER;
  	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
 		if(mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'RecordarPassword' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "call z_Consulta_RecordarPass('$codigorc','$codigocuenta','$particion','$mail')";
     	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'RecordarPassword' " . $mysqli->error.' CONSULTA: '.$SQL);
      		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }

    /**********************************************************************/
   function Obtener_Descripcion_Alfa($codigoAlfa){
   		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Obtener_Descripcion_Alfa' " .  mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
          	exit();
        }
        $SQL = "SELECT NOMBRE FROM ALMACODIGOS WHERE CODIGOALFA = '$codigoAlfa'";
        if (!$mysqli->real_query($SQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'Obtener_Descripcion_Alfa' " . $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }

	// FUNCIONES PARA PUNTOS!!!!!
	/**********************************************************************/
    //siendo clienteID el id de una flota o bien el Id de un Movil
	function Puntos_Cliente($clienteId, $esFlota){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Puntos_Cliente' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
      		exit();
     	}
    	//$SQL = "call z_Puntos_Cliente('$clienteId','$esFlota')";
	 	$SQL = "SELECT pumapuntos.`ORDER_ID`,
	        pumapuntos.`LATITUD`,
	        pumapuntos.`LONGITUD`,
	        pumapuntos.`NOMBRE`,
	        pumapuntos.`ICONO`,
	        pumapuntos.`DATOS`,
	        pumapuntos.`FLOTA_ID`,
	        pumapuntos.`PUBLICO`,
	        pumapuntos.`SEGURO`,
	        pumapuntos.`TOLERANCIA`,
	        Grupo.`ORDER_ID` AS GRUPO,
	        pumapuntos.`ESFLOTA`
	        FROM pumapuntos
	        LEFT JOIN `pumagrupos` Grupo
	             ON pumapuntos.`FLOTA_ID` = Grupo.`FLOTA_ID` AND
	                pumapuntos.`ESFLOTA` = Grupo.`ESFLOTA` AND
	                Grupo.`ORDER_ID` IN (SELECT grupo_punto.`GRUPO_ID`
	                                     FROM grupo_punto
	                                     WHERE grupo_punto.`PUNTO_ID` = pumapuntos.`ORDER_ID`)
	        WHERE ($esFlota = 2 AND pumapuntos.`FLOTA_ID` = $clienteId AND `pumapuntos`.`ESFLOTA` = 2) OR
	              ($esFlota = 2 AND (SELECT abmacodigos.`FLOTA_ID` FROM abmacodigos WHERE abmacodigos.`ORDER_ID` = $clienteId) IS NOT NULL
	              AND pumapuntos.`FLOTA_ID` = (SELECT abmacodigos.`FLOTA_ID` FROM abmacodigos WHERE abmacodigos.`ORDER_ID` = $clienteId)
	              AND `pumapuntos`.`ESFLOTA`= 3 AND pumapuntos.`PUBLICO` = 1) OR
		 ($esFlota=4 AND (select `aliases`.`cuentaFk` from `aliases` where `aliases`.`esFlota` = 3 and `aliases`.`id` = $clienteId) IS NOT NULL
		    AND pumapuntos.`FLOTA_ID` = (select `aliases`.`cuentaFk` from `aliases` where `aliases`.`esFlota` = 3 and `aliases`.`id` = $clienteId)
		    AND `pumapuntos`.`ESFLOTA`= 3 AND pumapuntos.`PUBLICO` = 1) OR
	              ($esFlota <> 2 AND pumapuntos.`FLOTA_ID` = $clienteId AND `pumapuntos`.`ESFLOTA` = $esFlota)
	        ORDER BY NOMBRE ";

		if (!$mysqli->real_query($SQL)){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Puntos_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
	       	exit();
	    }
	    return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
    function Grupos_Cliente($clienteId, $esFlota){//siendo clienteID el id de una flota o bien el Id de un Movil
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Grupos_Cliente' " .  mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
      	$SQL = "call z_Grupos_Cliente('$clienteId','$esFlota')";
     	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR',"FUNCION: 'Grupos_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
			exit();
     	}
     	return BykomCliente::getResultado($mysqli);
    }
	/**********************************************************************/
    //persiste un objeto del tipo "MisPuntos" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	function PersistirPunto($Punto, $oldGrupo){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirPunto' " .  mysqli_connect_error() );
		   	$Punto->id=-1;
	       	return ($Punto);
	    }
	 	if (($Punto->id=='')||($Punto->id==null)){ //ES UN INSERT
	 		$SQL = "INSERT INTO `pumapuntos` (`NOMBRE`, `LATITUD`, `LONGITUD`, `DATOS`, `FLOTA_ID`, `ICONO`, `SEGURO`, `PUBLICO`, `ESFLOTA`) ";
			$SQL .= "VALUES ('$Punto->nombre', '$Punto->latitud', '$Punto->longitud', '$Punto->datos', $Punto->flotaId, $Punto->icono, $Punto->seguro, $Punto->publico, $Punto->esflota);";
	 	}else{
		 	$SQL = "UPDATE `pumapuntos` SET ";
			$SQL .= "pumapuntos.`NOMBRE`='$Punto->nombre', ";
			$SQL .= "pumapuntos.`LATITUD`='$Punto->latitud', ";
			$SQL .= "pumapuntos.`LONGITUD`='$Punto->longitud', ";
			$SQL .= "pumapuntos.`DATOS`='$Punto->datos', ";
			$SQL .= "pumapuntos.`ICONO`=$Punto->icono, ";
			$SQL .= "pumapuntos.`SEGURO`=$Punto->seguro, ";
			$SQL .= "pumapuntos.`PUBLICO`=$Punto->publico ";
			$SQL .= " WHERE pumapuntos.`ORDER_ID` = $Punto->id";
		}

	 	$mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     	if (!$mysqli->real_query($SQL)){
	   		$LOGGER->addLine('ERROR',"FUNCION: 'PersistirPunto' " .  $mysqli->error.' CONSULTA: '.$SQL);
       		$mysqli->real_query("ROLLBACK");
	   		$Punto->id=-1;
       		return ($Punto);
     	}
	 	if (($Punto->id=='')||($Punto->id==null)) //fue un insert
	 		$Punto->id=$mysqli->insert_id;

		//AHORA DEBO PERSISTIR LA RELACION GRUPO-PUNTO
		if ((int)$oldGrupo!=(int)$Punto->grupoId){
	 		if((int)$oldGrupo!=0){
				$SQL = "DELETE FROM grupo_punto WHERE grupo_punto.GRUPO_ID = $oldGrupo and grupo_punto.PUNTO_ID = $Punto->id;";
				if (!$mysqli->real_query($SQL)){
				 	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirPunto' " .  $mysqli->error.' CONSULTA: '.$SQL);
	      		 	$mysqli->real_query("ROLLBACK");
		  		 	$Punto->id=-1;
	      		 	return ($Punto);
	     		}
			}else if((int)$Punto->grupoId!=0){
	 			$SQL = "INSERT INTO `grupo_punto` (`GRUPO_ID`, `PUNTO_ID`) VALUES ($Punto->grupoId, $Punto->id);";
	 			if (!$mysqli->real_query($SQL)){
			 		$LOGGER->addLine('ERROR',"FUNCION: 'PersistirPunto' " .  $mysqli->error.' CONSULTA: '.$SQL);
      		 		$mysqli->real_query("ROLLBACK");
	  		 		$Punto->id=-1;
      		 		return ($Punto);
     			}
			}
	 	}
	 	$mysqli->real_query("COMMIT");
	 	$mysqli->close();
     	return ($Punto);
	}
	/**********************************************************************/
	//persiste un objeto del tipo "MisGrupos" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	function PersistirGrupo($Grupo){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'PersistirGrupo' " .  mysqli_connect_error() );
	   		$Grupo->id=-1;
       		return ($Grupo);
		}
		if (($Grupo->id=='')||($Grupo->id==null)){ //ES UN INSERT
	 		$SQL = "INSERT INTO `pumagrupos` (`NOMBRE`, `DATOS`, `FLOTA_ID`, `ESFLOTA`) ";
			$SQL .= "VALUES ('$Grupo->nombre', '$Grupo->datos', $Grupo->flotaId, $Grupo->esflota);";
	 	}else{
 			$SQL = "UPDATE `pumagrupos` SET ";
			$SQL .= "pumagrupos.`NOMBRE`='$Grupo->nombre', ";
			$SQL .= "pumagrupos.`DATOS`='$Grupo->datos' ";
			$SQL .= " WHERE pumagrupos.`ORDER_ID` = $Grupo->id";
		}
	    if (!$mysqli->real_query($SQL)){
	   		$LOGGER->addLine('ERROR',"FUNCION: 'PersistirGrupo' " .$mysqli->error.' CONSULTA: '.$SQL);
       		$Grupo->id=-1;
       		return ($Grupo);
     	}
	 	if (($Grupo->id=='')||($Grupo->id==null)) //fue un insert
	 		$Grupo->id=$mysqli->insert_id;
	 	$mysqli->close();
     	return ($Grupo);
    }

	/**********************************************************************/
	 function PersistirGrupoMovil($Grupo) //persiste un objeto del tipo "GrupoMovil" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirGrupoMovil' " . mysqli_connect_error() );
	   	$Grupo->id=-1;
       	return ($Grupo);
     }
	 if (($Grupo->id=='')||($Grupo->id==null)){ //ES UN INSERT
	 	$SQL = "INSERT INTO `grupomovil` (`NOMBRE`, `DATOS`, `FLOTA_ID`, `ES_FLOTA`) ";
		$SQL .= "VALUES ('$Grupo->nombre', '$Grupo->datos', $Grupo->flotaId, $Grupo->esflota);";
	 }else{
	 	$SQL = "UPDATE `grupomovil` SET ";
		$SQL .= "grupomovil.`NOMBRE`='$Grupo->nombre', ";
		$SQL .= "grupomovil.`DATOS`='$Grupo->datos' ";
		$SQL .= " WHERE grupomovil.`ORDER_ID` = $Grupo->id";
	 }
     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirGrupoMovil' " . $mysqli->error.' CONSULTA: '.$SQL);
       $Grupo->id=-1;
       return ($Grupo);
     }
	 if (($Grupo->id=='')||($Grupo->id==null)) //fue un insert
	 	$Grupo->id=$mysqli->insert_id;
	 $mysqli->close();
     return ($Grupo);
    }

	/**********************************************************************/
	 function PersistirContacto($Contacto) //persiste un objeto del tipo "GrupoMovil" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirContacto' " . mysqli_connect_error() );
	   	$Contacto->id=-1;
       	return ($Contacto);
     }
	 if (($Contacto->id=='')||($Contacto->id==null)){ //ES UN INSERT
	 	$SQL = "INSERT INTO `contacto` (`cuentaFk`, `objetivo`, `nomyapel`, `tipodoc`, `nrodoc`, `direccion`, `telefono1`, `telefono2`, `email`, `observaciones`) ";
		$SQL .= "VALUES ($Contacto->cuentaFk, $Contacto->objetivo, '$Contacto->nomyapel', '$Contacto->tipodoc',";
		$SQL .= " '$Contacto->nrodoc', '$Contacto->direccion', '$Contacto->telefono1', '$Contacto->telefono2',";
		$SQL .= " '$Contacto->email', '$Contacto->observaciones');";
	 }else{
	 	$SQL = "UPDATE `contacto` SET ";
		$SQL .= "contacto.`nomyapel`='$Contacto->nomyapel', ";
		$SQL .= "contacto.`tipodoc`='$Contacto->tipodoc', ";
		$SQL .= "contacto.`nrodoc`='$Contacto->nrodoc', ";
		$SQL .= "contacto.`direccion`='$Contacto->direccion', ";
		$SQL .= "contacto.`telefono1`='$Contacto->telefono1', ";
		$SQL .= "contacto.`telefono2`='$Contacto->telefono2', ";
		$SQL .= "contacto.`email`='$Contacto->email', ";
		$SQL .= "contacto.`observaciones`='$Contacto->observaciones' ";
		$SQL .= " WHERE contacto.`id` = $Contacto->id";
	 }

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirContacto' " . $mysqli->error.' CONSULTA: '.$SQL);
       $Contacto->id=-1;
       return ($Contacto);
     }
	 if (($Contacto->id=='')||($Contacto->id==null)) //fue un insert
	 	$Contacto->id=$mysqli->insert_id;
	 $mysqli->close();
     return ($Contacto);
    }

	/**********************************************************************/
    //persiste un objeto del tipo "GrupoMovil" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	function PersistirCuentaContacto($CuentaContacto){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirCuentaContacto' " . mysqli_connect_error() );
	 	$CuentaContacto->cuenta = -1;
	    return ($CuentaContacto);
     }
	 switch((int)$CuentaContacto->objetivo){
	 	case 3:	$SQL = "UPDATE `tlmapersonas` cta SET ";
				break;
		case 2: $SQL = "UPDATE `abmacodigos` cta SET ";
				break;
		case 5: $SQL = "UPDATE `dealer` cta SET ";
				break;
	 }
	 $SQL .= "cta.`OBSERVACIONES`='$CuentaContacto->observaciones' ";
	 if ((int)$CuentaContacto->objetivo==5)
	 	$SQL .= " WHERE cta.`id` = $CuentaContacto->cuenta";
	 else
		$SQL .= " WHERE cta.`ORDER_ID` = $CuentaContacto->cuenta";
     if (!$mysqli->real_query($SQL)){
	    $LOGGER->addLine('ERROR',"FUNCION: 'PersistirCuentaContacto' " . $mysqli->error.' CONSULTA: '.$SQL);
	 	$CuentaContacto->cuenta = -1;
        return ($CuentaContacto);
     }
	 $mysqli->close();
     return ($CuentaContacto);
    }

	/**********************************************************************/
    //elimina un contacto segun su ID
	function EliminarContacto($Id){
		global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
     		$LOGGER->addLine('ERROR',"FUNCION: 'EliminarContacto' " . mysqli_connect_error() );
	       	return ('Error en conexion con DB');
    	}
	 	$SQL = "";
	 	if (($Id!=null)and($Id!='')) {
	 		$SQL = "DELETE FROM contacto WHERE contacto.`id` = $Id";
	 	}
	    if (!$mysqli->real_query($SQL)) {
		    $LOGGER->addLine('ERROR',"FUNCION: 'EliminarContacto' " . $mysqli->error.' CONSULTA: '.$SQL);
       		return ('Se produjo un error al tratar de eliminar el contacto de la base de datos');
     	}
	 	return('OK');
	 }

	/**********************************************************************/
	//elimina todos los grupos de moviles, dejando a los moviles con un 0 como grupo base.
	function EliminarGrupoMovil($Ids){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarGrupoMovil' " . mysqli_connect_error() );
       	return (false);
     }
	 $SQL = "";
	 if (($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM grupomovil WHERE grupomovil.`ORDER_ID` IN  (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarGrupoMovil' " . $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }

	if (($Ids!=null)and($Ids!='')){
	 	$SQL = "UPDATE `abmacodigos` SET ";
		$SQL .= "abmacodigos.`GRUPOMOVIL` = 0 ";
		$SQL .= " WHERE abmacodigos.`GRUPOMOVIL` IN (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarGrupoMovil' " . $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }
     return (true);
    }

	/**********************************************************************/
	function UpdateGrupoMovil($grupoId, $movilesIds){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'UpdateGrupoMovil' " . mysqli_connect_error() );
       		return (false);
     	}

		if (($movilesIds!=null)and($movilesIds!='')){
		 	$SQL = "UPDATE `abmacodigos` SET ";
			$SQL .= "abmacodigos.`GRUPOMOVIL` = $grupoId ";
			$SQL .= " WHERE abmacodigos.`ORDER_ID` IN (".implode(',',$movilesIds).")";
		 }

	     if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'UpdateGrupoMovil' " . $mysqli->error.' CONSULTA: '.$SQL);
	       return (false);
	     }
	     return (true);
    }

	/**********************************************************************/
	function UpdateEstadoMovil($movilId, $estado){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'UpdateEstadoMovil' " . mysqli_connect_error() );
       	return (false);
     }

	 $SQL = "UPDATE `abmacodigos` SET ";
	 $SQL .= "abmacodigos.`ACTIVO` = $estado ";
	 $SQL .= " WHERE abmacodigos.`ORDER_ID` = $movilId";

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'UpdateEstadoMovil' " . $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }
     return (true);
    }

	/**************************************************************************************************/
	 function EliminarPuntos($Ids,$cuentaId,$objetivo) //elimina todos los puntos de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarPuntos' " . mysqli_connect_error() );
	    	return (false);
	    }
	     //EJECUTO EL PRIMER QUERY
	 	$mysqli->real_query("BEGIN");
		if (($Ids!=null)&&($Ids!='')){
		 	$SQL = "DELETE FROM pumapuntos WHERE pumapuntos.`ORDER_ID` IN  (".implode(',',$Ids).")";
		}
	    if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarPuntos' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       return (false);
	    }

		if (($Ids!=null)&&($Ids!='')){
			$SQL = "DELETE FROM grupo_punto WHERE grupo_punto.`PUNTO_ID` IN  (".implode(',',$Ids).")";
		}
	    if (!$mysqli->real_query($SQL)){
		   	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarPuntos' " . $mysqli->error.' CONSULTA: '.$SQL);
		    $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       	return (false);
     	}

	 	if(($Ids!=null)&&($Ids!='')){
	 		$SQL = "DELETE FROM puntos_visibles WHERE `PUNTO_ID` IN  (".implode(',',$Ids).")";
	 	}
		if (!$mysqli->real_query($SQL)){
	   		$LOGGER->addLine('ERROR',"FUNCION: 'EliminarPuntos' " . $mysqli->error.' CONSULTA: '.$SQL);
			$mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       		return (false);
     	}

     	if($cuentaId!=null && $cuentaId!=""){
			$SQLDel = "DELETE FROM `mapa_puntos` WHERE `cuentaId`=$cuentaId AND `objetivo`= $objetivo AND puntoId IN  (".implode(',',$Ids).") ";
			if (!$mysqli->real_query($SQLDel)){
				$LOGGER->addLine('ERROR',"FUNCION: 'EliminarPuntos' " . $mysqli->error.' CONSULTA: '.$SQLDel);
			   	$mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
		       	return (false);
		    }
     	}
	 	$mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 	$mysqli->close();
     	return (true);
    }

	 function EliminarGrupos($Ids) //elimina todos los grupos y sus puntos de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarGrupos' " . mysqli_connect_error() );
       	return (false);
     }
	 if (($Ids!=null)&&($Ids!='')){
	 	$SQL = "DELETE FROM grupo_punto WHERE grupo_punto.`GRUPO_ID` IN  (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarGrupos' " . $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }

	 if (($Ids!=null)&&($Ids!='')){
	 	$SQL = "DELETE FROM pumagrupos WHERE pumagrupos.`ORDER_ID` IN  (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarGrupos' " . $mysqli->error.' CONSULTA: '.$SQL);
       return (false);
     }
     return (true);
    }

	 function PublicarPuntos($Ids, $publicar) //publica todos los puntos de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PublicarPuntos' " . mysqli_connect_error() );
	       	return (false);
     	}
		 $value=0;
		 if ($publicar)
		 	$value=1;
	     if (mysqli_connect_errno()){
	       return (-1);
	     }
		 if (($Ids!=null)&&($Ids!='')){
		 	$SQL = "UPDATE `pumapuntos` SET pumapuntos.`PUBLICO`=$value WHERE pumapuntos.`ORDER_ID` IN (".implode(',',$Ids).")";
		 }

	     if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PublicarPuntos' " . $mysqli->error.' CONSULTA: '.$SQL);
	       return (-1);
	     }
     	return ($value);
    }

	function SeguroPuntos($Ids, $seguro) //marca todos los puntos que esten en el array de Ids como seguro/inseguro y retorna True en caso de exito
	{
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'SeguroPuntos' " . mysqli_connect_error() );
	       	return (false);
     	}
		 $value=0;
		 if ($seguro)
		 	$value=1;
	     if (mysqli_connect_errno()){
	       return (-1);
	     }
		 if (($Ids!=null)&&($Ids!='')){
		 	$SQL = "UPDATE `pumapuntos` SET pumapuntos.`SEGURO`=$value WHERE pumapuntos.`ORDER_ID` IN (".implode(',',$Ids).")";
		 }

	     if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'SeguroPuntos' " .$mysqli->error.' CONSULTA: '.$SQL);
	       return (-1);
	     }
	     return ($value);
    }

	// FUNCIONES PARA ZONAS!!!!!
	/**********************************************************************/
	 //siendo clienteID el id de una flota o bien el Id de un Movil
	function Zonas_Cliente($clienteId, $esFlota){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Zonas_Cliente' " . mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
    	// $SQL = "call z_Zonas_Cliente('$clienteId','$esFlota')";
    	$SQL = "select pomapoligonos.`ORDER_ID`,
				pomapoligonos.`NOMBRE`,
				pomapoligonos.`DATOS`,
				pomapoligonos.`COLOR`,
				pomapoligonos.`FLOTA_ID`,
				pomapoligonos.`PUBLICO`,
				pomapoligonos.`ESFLOTA`
				from pomapoligonos
				where ($esFlota = 2 and pomapoligonos.`FLOTA_ID` = $clienteId and `pomapoligonos`.`ESFLOTA` = 2) OR
				($esFlota = 2 and (SELECT abmacodigos.`FLOTA_ID` FROM abmacodigos WHERE abmacodigos.`ORDER_ID` = $clienteId) is not Null
				   and pomapoligonos.`FLOTA_ID` = (SELECT abmacodigos.`FLOTA_ID` FROM abmacodigos WHERE abmacodigos.`ORDER_ID` = $clienteId)
				    and `pomapoligonos`.`ESFLOTA` = 3 and pomapoligonos.`PUBLICO` = 1) OR

				($esFlota=4 AND (select `aliases`.`cuentaFk` from `aliases` where `aliases`.`esFlota` = 3 and `aliases`.`id` = $clienteId) IS NOT NULL
				  and pomapoligonos.`FLOTA_ID` = (select `aliases`.`cuentaFk` from `aliases` where `aliases`.`esFlota` = 3 and `aliases`.`id` = $clienteId)
				    AND `pomapoligonos`.`ESFLOTA`= 3 AND pomapoligonos.`PUBLICO` = 1) OR
				($esFlota <> 2  and pomapoligonos.`FLOTA_ID` = $clienteId and `pomapoligonos`.`ESFLOTA` = $esFlota)
		        ORDER BY ORDER_ID ";
	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'Zonas_Cliente' " .$mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
    	 return BykomCliente::getResultado($mysqli);
    }

    //Retorna todos los puntos de una zona determinada
	function Puntos_Zona($zonaId){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Puntos_Zona' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	     }
	     $SQL = "call z_Puntos_Zona('$zonaId')";
	     if (!$mysqli->real_query($SQL)){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Puntos_Zona' " .$mysqli->error.' CONSULTA: '.$SQL);
	     	exit();
	     }
	     return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
	 function PersistirZona($Zona) //persiste un objeto del tipo "MisZonas" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirZona' " . mysqli_connect_error() );
	   	$Zona->id=-1;
       	return ($Zona);
     }
	 //POMAPOLIGONOS
	 $SQL = "";
	 $colorDec = hexdec($Zona->color); //convertimos el color de HEXA a DECIMAL
	 if (($Zona->id=='')||($Zona->id==null)){ //ES UN INSERT
		//inserto en POMAPOLIGONOS
	 	$SQL = "INSERT INTO `pomapoligonos` (`NOMBRE`, `DATOS`, `COLOR`, `FLOTA_ID`, `TIPO`, `PUBLICO`, `ESFLOTA`) ";
		$SQL .= "VALUES ('$Zona->nombre', '$Zona->datos', $colorDec, $Zona->flotaId, 2, $Zona->publico, $Zona->esflota);";
	 } else{
	 	$SQL = "UPDATE `pomapoligonos` SET ";
		$SQL .= "pomapoligonos.`NOMBRE`='$Zona->nombre', ";
		$SQL .= "pomapoligonos.`DATOS`='$Zona->datos', ";
		$SQL .= "pomapoligonos.`COLOR`=$colorDec, ";
		$SQL .= "pomapoligonos.`PUBLICO`=$Zona->publico ";
		$SQL .= " WHERE pomapoligonos.`ORDER_ID` = $Zona->id";
	 }


	 //EJECUTO EL PRIMER QUERY
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirZona' " .$mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Zona->id=-1;
       return ($Zona);
     }
	 if (($Zona->id=='')||($Zona->id==null)) //fue un insert
	 	$Zona->id=$mysqli->insert_id;

	 //PUMAPUNTOS
	 $SQL = "DELETE FROM `porlpoligonos` WHERE porlpoligonos.`ORDER_RL`=$Zona->id";
	 if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirZona' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Zona->id=-1;
       return ($Zona);
     }
	 $SQL = "INSERT INTO `porlpoligonos` (`ORDER_RL`, `LATITUD`, `LONGITUD`) VALUES ";
	 for ($i=0; $i<$Zona->cantidadPuntos(); $i++){
	    $lat = $Zona->PUNTOSLAT[$i];
		$lng = $Zona->PUNTOSLNG[$i];
		$SQL .= "($Zona->id, '$lat', '$lng')";
		if ($i<$Zona->cantidadPuntos()-1)
			$SQL.=",";
	 }
	 $SQL.=";";
	 if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirZona' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Zona->id=-1;
       return ($Zona);
     }

	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA => PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return ($Zona);
    }

	/**************************************************************************************************/
	 function EliminarZonas($Ids,$cuentaId,$objetivo) //elimina todas las zonas de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarZonas' " . mysqli_connect_error() );
       	return (false);
     }
	 if (($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM porlpoligonos WHERE porlpoligonos.`ORDER_RL` IN  (".implode(',',$Ids).")";
	 }
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarZonas' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 if(($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM pomapoligonos WHERE pomapoligonos.`ORDER_ID` IN  (".implode(',',$Ids).")";
	 }
	 if(!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarZonas' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 if(($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM zonas_visibles WHERE `ZONA_ID` IN  (".implode(',',$Ids).")";
	 }
	 if(!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarZonas' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 if($cuentaId!=null && $cuentaId!=""){
		$SQLDel = "DELETE FROM `mapa_zonas` WHERE `cuentaId`=$cuentaId AND `objetivo`= $objetivo AND zonaId IN  (".implode(',',$Ids).") ";
		if (!$mysqli->real_query($SQLDel)){
			$LOGGER->addLine('ERROR',"FUNCION: 'EliminarZonas' " . $mysqli->error.' CONSULTA: '.$SQLDel);
		   	$mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       	return (false);
	    }
     }
	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return (true);
    }

	 function PublicarZonas($Ids, $publicar) //publica todas las zonas de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'PublicarZonas' " . mysqli_connect_error() );
        return (-1);
     }
	 $value=0;
	 if ($publicar)
	 	$value=1;
	 if (($Ids!=null)&&($Ids!='')){
	 	$SQL = "UPDATE `pomapoligonos` SET pomapoligonos.`PUBLICO`=$value WHERE pomapoligonos.`ORDER_ID` IN (".implode(',',$Ids).")";
	 }

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PublicarZonas' " . $mysqli->error.' CONSULTA: '.$SQL);
       return (-1);
     }
     return ($value);
    }

/**********************************************************************/
	 function PersistirRegla($Regla){//persiste un objeto del tipo "Regla" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " . mysqli_connect_error() );
	   $Regla->id=-1;
       return ($Regla);
     }
	 //REGLA
	 $SQL = "";
	 if (($Regla->id=='')||($Regla->id==null)){ //ES UN INSERT
		//inserto en REGLA
	 	$SQL = "INSERT INTO `regla` (`NOMBRE`, `POLIGONOFK`, `DEBEESTAR`, `ESFLOTA`, `FLOTAID`, tipoRegla, tolerancia, parentFK, objetivoParentFK) ";
		$SQL .= "VALUES ('$Regla->nombre', $Regla->zona, $Regla->debeEstar, $Regla->esflota, $Regla->flotaId,$Regla->tipoRegla,$Regla->tolerancia,$Regla->parentFK,$Regla->objetivoParentFK); ";
	 }else{
	 	$SQL = "UPDATE `regla` SET ";
		$SQL .= "regla.`NOMBRE`='$Regla->nombre', ";
		$SQL .= "regla.`POLIGONOFK`=$Regla->zona, ";
		if($Regla->tipoRegla==1 || $Regla->tipoRegla==2 ){
			$SQL .= "regla.`tolerancia`=$Regla->tolerancia, ";
		}
		$SQL .= "regla.`DEBEESTAR`=$Regla->debeEstar, ";
		$SQL .= "regla.`parentFK`=$Regla->parentFK, ";
		$SQL .= "regla.`objetivoParentFK`=$Regla->objetivoParentFK ";
		$SQL .= " WHERE regla.`id` = $Regla->id";
	 }
	 //EJECUTO EL PRIMER QUERY
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " .$mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Regla->id=-1;
       return ($Regla);
     }
	 if (($Regla->id=='')||($Regla->id==null)) //fue un insert
	 	$Regla->id=$mysqli->insert_id;

	 //FRANJAHORARIA
	 $SQL = "DELETE FROM `franjahoraria` WHERE franjahoraria.`REGLAFK`=$Regla->id";
	 if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Regla->id=-1;
       return ($Regla);
     }

	 $SQL = "INSERT INTO `franjahoraria` (`REGLAFK`, `DIAS`, `HORAINICIO`, `HORAFIN`) VALUES ";
	 for ($i=0; $i<$Regla->cantidadFranjas(); $i++){
	    $franja = $Regla->FRANJAS[$i];
		$horaIni = $franja[7];
		$horaFin = $franja[8];
		$dias = "";
		$comma = "";
		if($Regla->tipoRegla==2){//rutas
			$dias = $franja[0].",".$franja[1];
			$horaI = explode(" ",$franja[0]);
			$horaF = explode(" ",$franja[1]);
			$horaIni = $horaI[1];
			$horaFin = $horaF[1];
		}else{
			for ($j=0; $j<7; $j++){//domingo a sabado
				if (trim($franja[$j])=="true"){
				    $dias .= $comma.($j+1);
					$comma = ",";
					}
				}
		}
		$SQL .= "($Regla->id, '$dias', '$horaIni', '$horaFin')";
		if ($i<$Regla->cantidadFranjas()-1)
			$SQL.=",";
	 }
	 $SQL.=";";
	 if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " .$mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       $Regla->id=-1;
       return ($Regla);
     }

	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return ($Regla);
    }

	/**************************************************************************************************/
   function EliminarReglas($Ids) //elimina todas las reglas de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno())  {
     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " . mysqli_connect_errno());
       	return (false);
     }
	 if (($Ids!=null)and($Ids!='')){
	 	//FRANJAHORARIA
		$SQL = "DELETE FROM `franjahoraria` WHERE franjahoraria.`REGLAFK` IN  (".implode(',',$Ids).")";
	 }
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 if (($Ids!=null)and($Ids!='')){
	    //REGLAS
	 	$SQL = "DELETE FROM `regla_movil` WHERE `reglaFk` IN  (".implode(',',$Ids).")";
	 }
	 if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

	 if (($Ids!=null)and($Ids!='')){
	    //REGLAS
	 	$SQL = "DELETE FROM `regla` WHERE regla.`ID` IN  (".implode(',',$Ids).")";
	 }
	 if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRegla' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }
	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return (true);
    }

	/**********************************************************************/
	function Reglas_Cliente($cuenta, $objetivo){ //retorna una lista de reglas
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'Reglas_Cliente' " . mysqli_connect_error());
       	printf("Conexion fallida: %s\n", mysqli_connect_error());
       	exit();
     }
     $SQL = " select regla.`id`, regla.`debeEstar`, regla.`esFlota`, regla.`flotaID`, regla.`nombre`, regla.`poligonoFK` ,regla.`tipoRegla`, regla.`tolerancia` from regla ";
 	 $SQL .="where (regla.`flotaID` = $cuenta AND regla.`esFlota` = $objetivo) ORDER BY `regla`.`id`";
     if (!$mysqli->real_query($SQL)){
       $LOGGER->addLine('ERROR',"FUNCION: 'Reglas_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function Reglas_Franjas($reglaId){ //retorna una lista de franjas dado una reglaId, ordenada por ID de franja
	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'Reglas_Franjas' " . mysqli_connect_error());
       	printf("Conexion fallida: %s\n", mysqli_connect_error());
       	exit();
     }
     $SQL = "SELECT * from `franjahoraria` where `franjahoraria`.`reglaFK`=$reglaId";
     if (!$mysqli->real_query($SQL)){
     	 $LOGGER->addLine('ERROR',"FUNCION: 'Reglas_Franjas' " . $mysqli->error.' CONSULTA: '.$SQL);
       	printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
       	exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function AplicarRegla($ReglaId, $MovilesIds){ //Aplica una regla a una lista de moviles, y retorna $MovilesIds. Si no puede retorna -1
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'AplicarRegla' " . mysqli_connect_error());
       	return (-1);
     }
	 //REGLA-MOVIL
	 $SQL = "DELETE FROM `regla_movil` WHERE regla_movil.`REGLAFK`=$ReglaId";
	 //EJECUTO EL PRIMER QUERY
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
	 if (!$mysqli->real_query($SQL)){
	 	$LOGGER->addLine('ERROR',"FUNCION: 'AplicarRegla' " . $mysqli->error.' CONSULTA: '.$SQL);
	   	$mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	   	return (-1);
     }

	 if(count($MovilesIds)>0) {
		 //INSERTO LAS NUEVAS RELACIONES
		 $SQL = "INSERT INTO `regla_movil` (`REGLAFK`, `MOVILFK`) VALUES ";
		 for ($i=0; $i<count($MovilesIds); $i++){
		    $movilId = $MovilesIds[$i];
			$SQL .= "($ReglaId, $movilId)";
			if ($i<count($MovilesIds)-1)
				$SQL.=",";
		 }
		 $SQL.=";";
		 if (!$mysqli->real_query($SQL)){
		 	$LOGGER->addLine('ERROR',"FUNCION: 'AplicarRegla' " . $mysqli->error.' CONSULTA: '.$SQL);
		   	$mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
    	   	return (-1);
	     }
	 }

	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return ($MovilesIds);
	}
	/**********************************************************************/
	function Reglas_Moviles($reglaId){ //retorna una lista de relaciones regla_movil dado una reglaId
	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'Reglas_Moviles' " . mysqli_connect_error() );
       	printf("Conexion fallida: %s\n", mysqli_connect_error());
       	exit();
     }
     $SQL = "SELECT * from `regla_movil` where `regla_movil`.`reglaFK`=$reglaId";
     if (!$mysqli->real_query($SQL)){
		$LOGGER->addLine('ERROR',"FUNCION: 'Reglas_Moviles' " . $mysqli->error.' CONSULTA: '.$SQL);
     	printf("Query Invalido: %s\nWhole query: %s\n", $mysqli->error, $SQL);
       	exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/*******************************************************************************************************/
	function Monitor_Eventos($cuentaId, $esFlota, $Ids, $lastIdWeb, $lastIdByk, $limit,$padreId,$objetivoDB) //Retorna todos los eventos de una lista de Ids de cuentas, desde el $lastIdWeb y el $lastIdByk;
	{
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Monitor_Eventos' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	     }

		 if (trim($Ids)!=''){
		     //$SQL = "call z_Consulta_Historico_Mix_new($cuentaId, $esFlota, '$Ids', $lastIdWeb, $lastIdByk, $limit);";
	     	 /*
	     	  $SQLSelect =	"select ev.`ORDER_ID` id,
	           			    ab.`NOMBRE` cuenta,
	                        ab.`ORDER_ID` cuentaId,
	                        al.`CODIGOALFA` codigoAlfa,
	                        ev.`DETALLE` detalle,
	                        ev.`TIPOCEDU` tipocedu,
	                        ev.`PROCESADO` procesado,
	                        ev.`DATOS` datos,
	                        ev.`HIST_RL` historicoFk,
	                        ev.`LATITUD` latitud,
	                        ev.`LONGITUD` longitud,
	                        ev.`FECHAHORA` fecha,";
			$SQLInner= " INNER JOIN abmacodigos ab
	                        ON ab.ORDER_ID = ev.ORDER_RL
	                LEFT JOIN almacodigos al
	                        ON al.ORDER_ID = ev.EVENTO
		            LEFT OUTER JOIN `eventos_visibles` e_v ON e_v.`EVENTO_ID`=ev.EVENTO AND
							e_v.`ES_FLOTA`=".$esFlota." AND
	                        e_v.`CUENTA_ID`=".$cuentaId."
	                LEFT OUTER JOIN `eventos_universo` evU ON evU.`EVENTO_ID`=ev.EVENTO AND
	      					evU.`ES_FLOTA`=".$esFlota." AND
	      					evU.`CUENTA_ID`=" .$cuentaId." ";
			$SQLWhere1= " WHERE  ev.`ORDER_RL` IN (".$Ids.")
	                              AND ev.PROCESADO=0
	                              AND al.`VER_WEB`=1
	                              AND al.`ADM_WEB`=1
	                              AND ( (e_v.`TIPO_ALERTA`=1) OR ( (e_v.`TIPO_ALERTA` IS NULL ) AND (al.`TIPO_ALERTA`=1) ) )
	                              AND ( (evU.`TIPO_ALERTA` IS NOT NULL AND evU.`TIPO_ALERTA`=1) OR (evU.`TIPO_ALERTA` IS NULL) )
	                              AND ev.`ORDER_ID` NOT IN( select el.eventoId from eventos_locks el where NOT(el.cuentaId=".$cuentaId." and el.objetivo=".$esFlota.")
	                              				and el.tipoTabla = 1 ) ";
			$SQLWhere2= " WHERE  ev.`ORDER_RL` IN (".$Ids.")
	                              AND ev.PROCESADO=0
	                              AND al.`VER_WEB`=1
	                              AND al.`ADM_WEB`=1
	                              AND ( (e_v.`TIPO_ALERTA`=1) OR ( (e_v.`TIPO_ALERTA` IS NULL ) AND (al.`TIPO_ALERTA`=1) ) )
	                              AND ( (evU.`TIPO_ALERTA` IS NOT NULL AND evU.`TIPO_ALERTA`=1) OR (evU.`TIPO_ALERTA` IS NULL) )
	                              AND ev.`ORDER_ID` NOT IN( select el.eventoId from eventos_locks el where NOT(el.cuentaId=".$cuentaId." and el.objetivo=".$esFlota.")
	                              				and el.tipoTabla = 2 ) ";
			$SQL =  "(".$SQLSelect." 0 as tipoWeb from evmahistorico ev ".$SQLInner.$SQLWhere1."  ) UNION ( ".$SQLSelect." 1 as tipoWeb ".
	                   "from evmahistorico_wc ev ".$SQLInner.$SQLWhere2."  AND ev.REGLAFK IN (select id from regla RG where RG.flotaID =".$cuentaId." and RG.esFlota=".$esFlota.")".
	                   ") ORDER BY fecha ASC LIMIT ".$limit.";";
	         */
	        $SQLSelect ="SELECT ev.`ORDER_ID` id,
	           			    ab.`OBJETIVO` objetivo,
	           			    ab.`NOMBRE` cuenta,
	                        ab.`ORDER_ID` cuentaId,
	                        al.`CODIGOALFA` codigoAlfa,
	                        ev.`DETALLE` detalle,
	                        ev.`TIPOCEDU` tipocedu,
	                        ev.`PROCESADO` procesado,
	                        ev.`DATOS` datos,
	                        ev.`HIST_RL` historicoFk,
	                        ev.`LATITUD` latitud,
	                        ev.`LONGITUD` longitud,
	                        ev.`FECHAHORA` fecha,";
			$SQLInner= " INNER JOIN abmacodigos ab
	                        ON ab.ORDER_ID = ev.ORDER_RL
	                LEFT JOIN almacodigos al
	                        ON al.ORDER_ID = ev.EVENTO
	                LEFT OUTER JOIN `eventos_universo` evU ON evU.`EVENTO_ID`=ev.EVENTO AND
	      					evU.`ES_FLOTA`=".$esFlota." AND
	      					evU.`CUENTA_ID`=" .$cuentaId." ";
			$SQLWhere1= " WHERE  ev.`ORDER_RL` IN (".$Ids.")
	                              AND ev.PROCESADO=0
	                              AND al.`VER_WEB`=1
	                              AND al.`ADM_WEB`=1
	                              AND ( (evU.`TIPO_ALERTA` IS NOT NULL AND evU.`TIPO_ALERTA`=1) OR (evU.`TIPO_ALERTA` IS NULL) )
	                              AND ev.`ORDER_ID` NOT IN( select el.eventoId from eventos_locks el where NOT(el.cuentaId=".$cuentaId." and el.objetivo=".$esFlota.")
	                              				and el.tipoTabla = 1 ) ";
			$SQLWhere2= " WHERE  ev.`ORDER_RL` IN (".$Ids.")
	                              AND ev.PROCESADO=0
	                              AND al.`VER_WEB`=1
	                              AND al.`ADM_WEB`=1
	                              AND ( (evU.`TIPO_ALERTA` IS NOT NULL AND evU.`TIPO_ALERTA`=1) OR (evU.`TIPO_ALERTA` IS NULL) )
	                              AND ev.`ORDER_ID` NOT IN( select el.eventoId from eventos_locks el where NOT(el.cuentaId=".$cuentaId." and el.objetivo=".$esFlota.")
	                              				and el.tipoTabla = 2 ) ";

			$SQL =  "(".$SQLSelect." 0 as tipoWeb from evmahistorico ev ".$SQLInner.$SQLWhere1."  ) UNION ( ".$SQLSelect." 1 as tipoWeb ".
	                   "from evmahistorico_wc ev ".$SQLInner.$SQLWhere2."  AND ev.REGLAFK IN (select id from regla RG where RG.parentFK =".$padreId." and RG.objetivoParentFK=".$objetivoDB.")".
	                   ") ORDER BY fecha ASC LIMIT ".$limit.";";
	    	if (!$mysqli->real_query($SQL)){
	       		$LOGGER->addLine('ERROR',"FUNCION: 'Monitor_Eventos' " . $mysqli->error.' CONSULTA: '.$SQL);
	       		exit();
	     	}
		 }
	     return BykomCliente::getResultado($mysqli);
    }

	/*******************************************************************************************************/
	function Monitor_Evento_byId($eventoId, $esWeb) //Retorna un evento dado su id y su pertenecia(es web o no);
	{
		global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'Monitor_Evento_byId' " . mysqli_connect_error());
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
     	$SQL = "";
     	//$SQL = "call z_Consulta_Historico_Mix_uniqueEvent($eventoId, $esWeb);";
     	 $SQLSelect ="SELECT ev.`ORDER_ID` id,
	           			    ab.`OBJETIVO` objetivo,
	           			    ab.`NOMBRE` cuenta,
	                        ab.`ORDER_ID` cuentaId,
	                        al.`CODIGOALFA` codigoAlfa,
	                        ev.`DETALLE` detalle,
	                        ev.`TIPOCEDU` tipocedu,
	                        ev.`PROCESADO` procesado,
	                        ev.`DATOS` datos,
	                        ev.`HIST_RL` historicoFk,
	                        ev.`LATITUD` latitud,
	                        ev.`LONGITUD` longitud,
	                        DATE_FORMAT(ev.`FECHAHORA`,'%T %d/%m/%Y') fecha,";

			$SQLInner = " INNER JOIN abmacodigos ab
	                        ON ab.ORDER_ID = ev.ORDER_RL
	                		LEFT JOIN almacodigos al
	                        ON al.ORDER_ID = ev.EVENTO ";
			$SQLWhere1= " WHERE  ev.`ORDER_ID` =".$eventoId."
	                              AND ev.PROCESADO=0
	                              AND al.`VER_WEB`=1
	                              AND al.`ADM_WEB`=1 ";

			if($esWeb==0){
				$SQL = " $SQLSelect 0 as tipoWeb from evmahistorico ev $SQLInner $SQLWhere1 ORDER BY fecha ASC";
			}else{
				$SQL = " $SQLSelect 1 as tipoWeb from evmahistorico_wc ev $SQLInner $SQLWhere1 ORDER BY fecha ASC";
			}

   	 	if (!$mysqli->real_query($SQL)){
   			$LOGGER->addLine('ERROR',"FUNCION: 'Monitor_Evento_byId' " . $mysqli->error.' CONSULTA: '.$SQL);
   			exit();
		}
     	return BykomCliente::getResultado($mysqli);
    }

	/*******************************************************************************************************/
	function unlock_eventosByCuenta($cuentaId, $objetivo ,$user,$idEventosWC,$idEventosBY){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'unlock_eventosByCuenta' " .mysqli_connect_error());
	      	printf("Conexion fallida: %s\n", mysqli_connect_error());
	      	return false;
	    }
//		if($idEventosWC != ""){
//		    $SQL = "DELETE FROM eventos_locks WHERE cuentaId = $cuentaId AND objetivo = $objetivo AND eventoId IN($idEventosWC) AND tipoTabla=2";
//		 	if (!$mysqli->real_query($SQL)){
//		       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
//		       return false;
//	    	}
//	    }
//	    if($idEventosBY != ""){
//		    $SQL = "DELETE FROM eventos_locks WHERE cuentaId = $cuentaId AND objetivo = $objetivo AND eventoId IN($idEventosBY) AND  tipoTabla=1";
//		 	if (!$mysqli->real_query($SQL)){
//		       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
//		       return false;
//		    }
//	    }
	    //$SQL = "DELETE FROM eventos_locks WHERE cuentaId = $cuentaId AND objetivo = $objetivo and tipoTabla=$tipoTabla";
	   	return true;
	}

//	function unlock_eventos($idEventosWC, $idEventosBY,$user){
//	 	global $LOGGER;
//		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
//	    if (mysqli_connect_errno()){
//	      printf("Conexion fallida: %s\n", mysqli_connect_error());
//	      return false;
//	    }
//	    if($idEventosWC != ""){
//		    $SQL = "DELETE FROM eventos_locks WHERE eventoId IN($idEventosWC) and tipoTabla=2";
//		 	if (!$mysqli->real_query($SQL)){
//		       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
//		       return false;
//	    	}
//	    }
//	    if($idEventosBY != ""){
//		    $SQL = "DELETE FROM eventos_locks WHERE eventoId IN($idEventosBY) and  tipoTabla=1";
//		 	if (!$mysqli->real_query($SQL)){
//		       $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
//		       return false;
//		    }
//	    }
//		return true;
//	}
	function Procesar_Evento($idEventosWC, $idEventosBY, $procesado, $user, $datos, $concatena) //Marca un evento como procesado
	{
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()) {
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Procesar_Evento' " . mysqli_connect_error());
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	return false;
	     }
	     $SQL = "";
	     if($idEventosBY!=""){
         	$SQL .= "(SELECT ev.ORDER_ID as id, ev.PROCESADO as procesado, ev.USER_PROCESS as usuario, 1 as tabla
         		 FROM evmahistorico ev
				 WHERE ev.ORDER_ID IN ($idEventosBY) AND ev.PROCESADO = 1)";
         }
         if($idEventosWC!=""){
         	if($idEventosBY!=""){
				$SQL .= " UNION ";
         	}
			$SQL .= "(SELECT evwc.ORDER_ID as id, evwc.PROCESADO as procesado, evwc.USER_PROCESS as usuario, 2 as tabla
         		 FROM evmahistorico_wc evwc
				 WHERE evwc.ORDER_ID IN ($idEventosWC) AND evwc.PROCESADO = 1)";
         }
		 if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'Procesar_Evento' " . $mysqli->error.' CONSULTA: '.$SQL);
	       return false;
	     }
         $result = BykomCliente::getResultado($mysqli);
		 $res = array();
         if($result->cantidad()>0){
         	$idsBY=$idsWC=array();
			if($idEventosBY!=""){
				$idsBY = explode(",",$idEventosBY);
			}
			if($idEventosWC!=""){
				$idsWC = explode(",",$idEventosWC);
			}
         	for ($i=0; $i<$result->cantidad(); $i++){
				$obj = new stdClass();
				$obj ->eventoId = $result->campo('id',$i);
				$obj ->procesado= $result->campo('procesado',$i);
				$obj ->usuario	= $result->campo('usuario',$i);
				$obj ->tipoTabla= $result->campo('tabla',$i);
				array_push($res, $obj);
				if($obj ->tipoTabla == 1 && in_array($obj ->eventoId,$idsBY)){
					$pos = array_search($obj ->eventoId,$idsBY);
					array_splice($idsBY, $pos,1);
				}
				if($obj ->tipoTabla == 2 && in_array($obj ->eventoId,$idsWC)){
					$pos = array_search($obj ->eventoId,$idsWC);
					array_splice($idsWC, $pos,1);
				}
	       	}
	       	$idEventosBY	= implode(",",$idsBY);
	       	$idEventosWC	= implode(",",$idsWC);

         }

		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()) {
	       $LOGGER->addLine('ERROR',"FUNCION: 'Procesar_Evento' " . mysqli_connect_error());
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       return false;
	     }
	     $SQL = "call z_procesar_Evento('$idEventosWC', '$idEventosBY', $procesado, '$user', '$datos', $concatena)";
	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'Procesar_Evento' " . $mysqli->error.' CONSULTA: '.$SQL);
	       return false;
	     }
	     return $res;
    }

    function consultar_eventosLock($idEventosWC, $idEventosBY,$cuentaId, $objetivo ,$user,$tipoTabla){
    	global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'consultar_eventosLock' " . mysqli_connect_error());
	      printf("Conexion fallida: %s\n", mysqli_connect_error());
	      return false;
	    }
	    if($idEventosWC == "" && $idEventosBY == ""){
	    	return false;
	    }
	    /**
	     * consulta los bloqueados segun los IDS que se le pasa como parametro que no son propios
	     */
	    $SQL = "SELECT eventoId,
						cuentaId,
						objetivo,
						username,
						fecha,
						tipoTabla
					 FROM eventos_locks
					 WHERE ";
    	if($idEventosWC!=""){
    		$SQL.="(eventoId IN ($idEventosWC) AND tipoTabla=2 AND  NOT(cuentaId = $cuentaId AND objetivo = $objetivo) )";
    	}
    	if($idEventosBY!=""){
    		if($idEventosWC!=""){
				$SQL.= " OR ";
    		}
			$SQL.= "(eventoId IN ($idEventosBY) AND tipoTabla=1 AND  NOT(cuentaId = $cuentaId AND objetivo = $objetivo) )";
    	}

	 	if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'consultar_eventosLock' " . $mysqli->error.' CONSULTA: '.$SQL);
	       return false;
	    }
	    return BykomCliente::getResultado($mysqli);
    }

	/**
	 * blockea los registros insertandolos en la tabla eventos_locks
	 */
    function lock_eventos($idEventosWC, $idEventosBY,$cuentaId, $objetivo ,$user){
    	 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'lock_eventos' " . mysqli_connect_error());
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       return false;
	     }
	     $vIdEventosWC		= array();
	     $vIdEventosBY		= array();
	     if($idEventosWC!=""){
	     	$vIdEventosWC 	= explode(",",$idEventosWC);
	     }
	     if($idEventosBY!=""){
	     	$vIdEventosBY 	= explode(",",$idEventosBY);
	     }
	     $oEventos			= new stdClass();
	     $vIdEventosOK 		= array();
	     $vIdEventosERROR 	= array();
         for ($i=0; $i<count($vIdEventosWC); $i++){
		    $SQL = "INSERT INTO eventos_locks (eventoId,cuentaId,objetivo,username,fecha,tipoTabla) VALUES ";
		    $evId = $vIdEventosWC[$i];
			$SQL .= "($evId, $cuentaId,$objetivo,'$user',now(),2)";
           	if (!$mysqli->real_query($SQL)){
		       $vIdEventosERROR[] = $evId;
		    }else{
		       $vIdEventosOK[] = $evId;
		    }
//			if ($i < count($vIdEventosWC)-1){
//				$SQL.=",";
//			}
		 }
	     for ($i=0; $i<count($vIdEventosBY); $i++){
	        $SQL = "INSERT INTO eventos_locks (eventoId,cuentaId,objetivo,username,fecha,tipoTabla) VALUES ";
		    $evId = $vIdEventosBY[$i];
			$SQL .= "($evId, $cuentaId,$objetivo,'$user',now(),1)";
	     	if (!$mysqli->real_query($SQL)){
		       $vIdEventosERROR[] = $evId;
		    }else{
		       $vIdEventosOK[] = $evId;
		    }
//			if ($i < count($vIdEventosBY)-1){
//				$SQL.=",";
//			}
		 }
		 $mysqli->close();
		 $oEventos->eventosOk = $vIdEventosOK;
		 $oEventos->eventosError= $vIdEventosERROR;
		 BykomCliente::guardarClienteMonitor($cuentaId,$objetivo);
		 return $oEventos;
    }
    function guardarClienteMonitor($cuentaId,$objetivo){
     	global $LOGGER;
		 BykomCliente::borrarClienteMonitor($cuentaId,$objetivo);
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'guardarClienteMonitor' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	return false;
	     }
    	 $SQL = "INSERT INTO cliente_monitor (cuentaId,objetivo,fechaActualizacion,estoy,fechaHora) VALUES
    	 		($cuentaId,$objetivo,now(),1,now())";
    	 if (!$mysqli->real_query($SQL)){
    	 	 $LOGGER->addLine('ERROR',"FUNCION: 'guardarClienteMonitor' " . $mysqli->error.' CONSULTA: '.$SQL );
	    	 return true;
    	 }
    	 $mysqli->close();
    	 return true;
    }
    function actualizarClienteMonitor($cuentaId,$objetivo){
     	global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'actualizarClienteMonitor' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	return false;
	     }
    	 $SQL = "UPDATE cliente_monitor SET estoy=1, fechaActualizacion=now() WHERE cuentaId = $cuentaId AND objetivo = $objetivo";
    	 if (!$mysqli->real_query($SQL)){
     		$LOGGER->addLine('ERROR',"FUNCION: 'actualizarClienteMonitor' " . $mysqli->error.' CONSULTA: '.$SQL );
    		return true;
    	 }
    	 $mysqli->close();
    	 return true;
    }
    function borrarClienteMonitor($cuentaId,$objetivo){
     	 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'borrarClienteMonitor' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	return false;
	     }
    	 $SQL = "DELETE FROM cliente_monitor WHERE cuentaId = $cuentaId AND objetivo=$objetivo";
    	 if (!$mysqli->real_query($SQL)){
    	 	 $LOGGER->addLine('ERROR',"FUNCION: 'borrarClienteMonitor' " . $mysqli->error.' CONSULTA: '.$SQL );
	    	 return true;
    	 }
    	 $mysqli->close();
    	 return true;
    }
	/*************************************************************************************/
    //persiste un objeto del tipo "Comando" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	function PersistirComando($Comando){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if(mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirComando' " . mysqli_connect_error() );
	   	$Comando->id=-1;
       	return ($Comando);
     }
	 //ENVIO_COMANDOS
	 $SQL = "";
	 if (($Comando->id=='')||($Comando->id==null)){ //ES UN INSERT
		//inserto en ENVIO_COMANDOS
	 	$SQL = "INSERT INTO `envio_comandos` (`ORDER_RL`,`ID_VEHICULO`,`COMANDO`,`ESTADO`,`RECEPTORA`,`TERMINAL`) ";
		$SQL .= "VALUES ($Comando->cuenta, $Comando->movilId, '$Comando->comando' ,$Comando->estado,";
		$SQL .= "$Comando->receptora, '$Comando->terminal');";
	 }else{
	 	$SQL = "UPDATE `envio_comandos` SET ";
		$SQL .= "envio_comandos.`ORDER_RL`='$Comando->cuenta, ";
		$SQL .= "envio_comandos.`ID_VEHICULO`=$Comando->movilId, ";
		$SQL .= "envio_comandos.`COMANDO`='$Comando->comando', ";
		$SQL .= "envio_comandos.`ESTADO`=$Comando->estado,";
		$SQL .= "envio_comandos.`RECEPTORA`=$Comando->receptora, ";
		$SQL .= "envio_comandos.`TERMINAL`='$Comando->terminal'";
		$SQL .= " WHERE envio_comandos.`ORDER_ID` = $Comando->id";
	 }
	 //EJECUTO EL QUERY
     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirComando' " . $mysqli->error.' CONSULTA: '.$SQL);
       $Comando->id=-1;
       return ($Comando);
     }
	 if (($Comando->id=='')||($Comando->id==null)) //fue un insert
	 	$Comando->id=$mysqli->insert_id;

	 $mysqli->close();
     return ($Comando);
    }
	/****************************************************************************/
	function RecibirComandos($envioIds){
		global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
     		$LOGGER->addLine('ERROR',"FUNCION: 'RecibirComandos' " . mysqli_connect_error() );
       		printf("Conexion fallida: %s\n", mysqli_connect_error());
       		exit();
     	}
      	$SQL =  "SELECT rc.* ";
	  	$SQL .= "FROM `resp_comandos` rc ";
	  	$SQL .= "WHERE rc.`ORDER_RL_ENV` IN (".implode(',',$envioIds).")";
     	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR',"FUNCION: 'RecibirComandos' " .  $mysqli->error.' CONSULTA: '.$SQL);
       		exit();
     	}
     	return BykomCliente::getResultado($mysqli);
	}
	/****************************************************************************/
	function persistirKeepAlive($cuentaId, $objetivo, $live){
	 	global $LOGGER;
	 	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'persistirKeepAlive' " . mysqli_connect_error() );
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	     }
	     $direccionRemota = $_SERVER['REMOTE_ADDR'];
	     $SQL = "call z_KeepAlive($cuentaId, $objetivo, '$direccionRemota', $live)";
	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'persistirKeepAlive' " .$mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
	     return BykomCliente::getResultado($mysqli);
	}
	/****************************************************************************/
	function Eventos_Cliente($cuentaId, $esFlota, $descripcionFil){
	  global $LOGGER;
	  $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
      if (mysqli_connect_errno()){
      	$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_Cliente' " . mysqli_connect_error() );
      	printf("Conexion fallida: %s\n", mysqli_connect_error());
      	exit();
      }
      $SQL =  "SELECT ac.*, ";
      //$SQL .= "if(ev.`TIPO_ALERTA` is null,ac.`TIPO_ALERTA`,ev.`TIPO_ALERTA`) as TIPO_ALERTA_CLIENTE, ";
      $SQL .= "if(ac.ALERTA_WEB ,1,0 )as TIPO_ALERTA_CLIENTE, ";
      $SQL .= "if(evU.`TIPO_ALERTA` is null, 1 ,evU.`TIPO_ALERTA`) as TIPO_UNIVERSO, ";
      $SQL .= "if(ac.PUNTOSEGURO_WEB,1,0 ) as TIPO_PUNTO_SEGURO, ";
      //$SQL .= "if(evP.`TIPO_ALERTA` is null, 0,evP.`TIPO_ALERTA`) as TIPO_PUNTO_SEGURO, ";
      $SQL .= "if(evM.`TIPO_ALERTA` is null, 0,evM.`TIPO_ALERTA`) as TIPO_MAIL ";
	  $SQL .= "FROM `almacodigos` ac ";
	  /*
	  $SQL .= " LEFT OUTER JOIN `eventos_visibles` ev ON ev.`EVENTO_ID`=ac.`ORDER_ID` AND ";
      $SQL .= "                                   ev.`ES_FLOTA`=".$esFlota." AND ";
      $SQL .= "                                   ev.`CUENTA_ID`=" .$cuentaId;
	  */
      $SQL .= " LEFT OUTER JOIN `eventos_universo` evU ON evU.`EVENTO_ID`=ac.`ORDER_ID` AND ";
      $SQL .= "                                   evU.`ES_FLOTA`=".$esFlota." AND ";
      $SQL .= "                                   evU.`CUENTA_ID`=" .$cuentaId;
	  /*
      $SQL .= " LEFT OUTER JOIN `eventos_punto_seguro` evP ON evP.`EVENTO_ID`=ac.`ORDER_ID` AND ";
      $SQL .= "                                   evP.`ES_FLOTA`=".$esFlota." AND ";
      $SQL .= "                                   evP.`CUENTA_ID`=" .$cuentaId;
      */
      $SQL .= " LEFT OUTER JOIN `eventos_mail` evM ON evM.`EVENTO_ID`=ac.`ORDER_ID` AND ";
      $SQL .= "                                   evM.`CUENTA_ID`=" .$cuentaId;
	  $SQL .= " WHERE ac.`ADM_WEB`=1 ";
	  $SQL .= "   AND ac.`VER_WEB`=1 ";
	  if (($descripcionFil!=NULL)&&(trim($descripcionFil)!=''))
	  		$SQL .= "   AND ac.`NOMBRE` LIKE '%".$descripcionFil."%' ";
	  $SQL .= " ORDER BY ac.`NOMBRE` ";

      if (!$mysqli->real_query($SQL)){
       	$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
       	exit();
      }
      return BykomCliente::getResultado($mysqli);
	}

	function Eventos_ByMovil($cuentaId, $descripcionFil){
		global $LOGGER;
		/********************/
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_ByMovil' " . mysqli_connect_error() );
	      	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }
      	$SQL = "SELECT * FROM eventos_visibles ev WHERE ev.CUENTA_ID = $cuentaId";
      	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_ByMovil' " .$mysqli->error.' CONSULTA: '.$SQL);
      	 	exit();
      	}
      	$hayEventosVisibles	= BykomCliente::getResultado($mysqli);

		/********************/
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_ByMovil' " . mysqli_connect_error() );
	      	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }
     	$SQL = "SELECT * FROM eventos_punto_seguro eps WHERE eps.CUENTA_ID = $cuentaId";
      	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_ByMovil' " .$mysqli->error.' CONSULTA: '.$SQL);
      	 	exit();
      	}
      	$hayPtoSeguro	= BykomCliente::getResultado($mysqli);
		/********************/
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_ByMovil' " . mysqli_connect_error() );
	      	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }

     	$SQL = "SELECT * FROM eventos_mail em WHERE em.CUENTA_ID = $cuentaId";
      	if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_ByMovil' " .$mysqli->error.' CONSULTA: '.$SQL);
      	 	exit();
      	}
      	$hayMail	= BykomCliente::getResultado($mysqli);
      	if($hayEventosVisibles->cantidad()==0 && $hayPtoSeguro->cantidad()==0 && $hayMail->cantidad() == 0 ){
      		return false;
      	}
		/********************/
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	    if (mysqli_connect_errno()){
	    	$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_ByMovil' " . mysqli_connect_error() );
	      	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	    }
     	$SQL =  "SELECT ac.*, ";
      	$SQL .= "if(ev.`TIPO_ALERTA` is null,if(ac.`ALERTA_WEB`,1,0),ev.`TIPO_ALERTA`) as TIPO_ALERTA_CLIENTE, ";
      	$SQL .= "if(evP.`TIPO_ALERTA` is null,if(ac.`PUNTOSEGURO_WEB`,1,0),evP.`TIPO_ALERTA`) as TIPO_PUNTO_SEGURO, ";
      	$SQL .= "if(evM.`TIPO_ALERTA` is null, 0,evM.`TIPO_ALERTA`) as TIPO_MAIL ";
	  	$SQL .= "FROM `almacodigos` ac ";

	  	$SQL .= " LEFT OUTER JOIN `eventos_visibles` ev ON ev.`EVENTO_ID`=ac.`ORDER_ID` AND ";
      	$SQL .= "                                   ev.`CUENTA_ID`=" .$cuentaId;

      	$SQL .= " LEFT OUTER JOIN `eventos_punto_seguro` evP ON evP.`EVENTO_ID`=ac.`ORDER_ID` AND ";
      	$SQL .= "                                   evP.`CUENTA_ID`=" .$cuentaId;

      	$SQL .= " LEFT OUTER JOIN `eventos_mail` evM ON evM.`EVENTO_ID`=ac.`ORDER_ID` AND ";
      	$SQL .= "                                   evM.`CUENTA_ID`=" .$cuentaId;

	  	$SQL .= " WHERE ac.`ADM_WEB`=1 ";
	  	$SQL .= "   AND ac.`VER_WEB`=1 ";
	  	if (($descripcionFil!=NULL)&&(trim($descripcionFil)!=''))
	  		$SQL .= "   AND ac.`NOMBRE` LIKE '%".$descripcionFil."%' ";
	    $SQL .= " ORDER BY ac.`NOMBRE` ";

      	if (!$mysqli->real_query($SQL)){
       		$LOGGER->addLine('ERROR',"FUNCION: 'Eventos_ByMovil' " .$mysqli->error.' CONSULTA: '.$SQL);
       		exit();
      	}
      	return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	function Resoluciones_Cliente($cuentaId, $esFlota, $nombreFil){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'Resoluciones_Cliente' " . mysqli_connect_error());
       	printf("Conexion fallida: %s\n", mysqli_connect_error());
       	exit();
     }
      $SQL =  "SELECT rr.* ";
	  $SQL .= "FROM `resolucionrapida` rr ";
	  $SQL .= "WHERE rr.esFlota = " . $esFlota . " AND rr.cuentaId = " . $cuentaId;
	  if (($nombreFil!=NULL)&&(trim($nombreFil)!=''))
	  		$SQL .= " AND rr.`nombre` LIKE '%".$nombreFil."%' ";
	  $SQL .= " ORDER BY rr.`nombre` ";

     if (!$mysqli->real_query($SQL)){
       $LOGGER->addLine('ERROR',"FUNCION: 'Resoluciones_Cliente' " .$mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
	 function PersistirMensaje($Mensaje) //persiste un objeto del tipo "Mensaje" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id si es que fallo al intentar realizar la operacion
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirMensaje' " . mysqli_connect_error());
	   $Mensaje->id=-1;
	   $Mensaje->mensaje="Fallo al intentar conectarse a la DB";
       return ($Mensaje);
     }
     // SIEMPRE ES UN INSERT
	 	$SQL = "INSERT INTO `mensaje` (`origen`, `labelOrigen`, `destino`, `labelDestino`, `objetivo`, `leido`, `mensaje`) ";
		$SQL .= "VALUES ($Mensaje->origen, '$Mensaje->labelOrigen', $Mensaje->destino, '$Mensaje->labelDestino', $Mensaje->objetivo, 0, '$Mensaje->mensaje');";

     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirMensaje' " .  $mysqli->error.' CONSULTA: '.$SQL);
	   $Mensaje->id=-1;
	   $Mensaje->mensaje="Fallo al intentar insertar el mensaje enviado en la DB de destino.";
       return ($Mensaje);
     }

	 $Mensaje->id=$mysqli->insert_id;
	 $mysqli->close();
     return ($Mensaje);
	}

	/****************************************************************************/
	function Consulta_Datos_Contacto_Cuenta_Avl($cuentaId, $objetivo){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Datos_Contacto_Cuenta_Avl' " . mysqli_connect_error());
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
	  if ((int)$objetivo==5)
	  	  $SQL =  "SELECT concat(cta.`NOMBRE`,' ',cta.`APELLIDO`) as NOMBRE, ";
	  else
	  	  $SQL =  "SELECT cta.NOMBRE, ";
	  $SQL .=  "if(cta.OBSERVACIONES is null,'', cta.OBSERVACIONES) as OBSERVACIONES ";
	  switch((int)$objetivo){
	  	case 1:
	  	case 2: $SQL .= "FROM `abmacodigos` cta ";
				break;
	  	case 3: $SQL .= "FROM `tlmapersonas` cta ";
				break;
		case 5: $SQL .= "FROM `dealer` cta ";
				break;
	  }
	  if ((int)$objetivo==5)
	  	  $SQL .= " WHERE cta.`id` = ".$cuentaId;
	  else
		  $SQL .= " WHERE cta.`ORDER_ID` = ".$cuentaId;
     if (!$mysqli->real_query($SQL)){
       $LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Datos_Contacto_Cuenta_Avl' " .$mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}
	/****************************************************************************/
	function Consulta_Datos_Contacto_Avl($cuentaId, $objetivo){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Datos_Contacto_Avl' " . mysqli_connect_error());
       printf("Conexion fallida: %s\n", mysqli_connect_error());
       exit();
     }
      $SQL =  "SELECT * ";
	  $SQL .= "FROM `contacto` con ";
	  $SQL .= " WHERE con.`cuentaFk` = ".$cuentaId." AND ";
	  $SQL .= "       con.`objetivo` = ".$objetivo;
	  $SQL .= " ORDER BY con.`id` ";
	  $LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
     if (!$mysqli->real_query($SQL)){
       $LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Datos_Contacto_Avl' " . $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/****************************************************************************/
	function Consultar_Mensajes($cuentaId, $objetivo){
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()){
     	$LOGGER->addLine('ERROR',"FUNCION: 'Consultar_Mensajes' " . mysqli_connect_error());
       	printf("Conexion fallida: %s\n", mysqli_connect_error());
       	exit();
     }
      $SQL =  "SELECT * ";
	  $SQL .= "FROM `mensaje` msg ";
	  $SQL .= " WHERE msg.`destino` = ".$cuentaId." AND ";
	  $SQL .= "       msg.`objetivo` = ".$objetivo." AND ";
	  $SQL .= "       msg.`leido` = 0 ";
	  $SQL .= " ORDER BY msg.`id` ";

     if (!$mysqli->real_query($SQL)){
       $LOGGER->addLine('ERROR',"FUNCION: 'Consultar_Mensajes' " .  $mysqli->error.' CONSULTA: '.$SQL);
       exit();
     }
     return BykomCliente::getResultado($mysqli);
	}

	/*************************************************************************************/
	function LeerMensajes($msgIds) //marca como leidos una lista de mensajes de chat
	{
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'LeerMensajes' " . mysqli_connect_error());
	       	return (false);
	     }
		$SQL = "UPDATE `mensaje` SET ";
		$SQL .= "mensaje.`leido`= 1 ";
		$SQL .= "WHERE mensaje.`id` IN ($msgIds)";

		 //EJECUTO EL QUERY
	     if (!$mysqli->real_query($SQL)){
		  $LOGGER->addLine('ERROR',"FUNCION: 'LeerMensajes' " . $mysqli->error.' CONSULTA: '.$SQL);
	       return ($false);
	     }

		 $mysqli->close();
	     return (true);
    }

	/*************************************************************************************/
	function Consulta_Historico_Eventos($movil,$fechai,$fechaf,$process,$inicio,$cantReg){
	    global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Eventos' " . mysqli_connect_error());
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

		$SQL = " (SELECT `evmahistorico_wc`.`ORDER_RL` as CUENTA,";
		$SQL .= " `evmahistorico_wc`.`FECHAHORA` as FECHA_MENSAJE, ";
		$SQL .= "		 if(ABMc.`OBJETIVO`=2,ABMc.`AVL_IDENTIFICADOR`,CONCAT_WS(' - ',ABMc.NOMBRE, ABMc.NOMBRE_DOS) )as MOVIL,";
        $SQL .= "		 `evmahistorico_wc`.`DETALLE`, ";
        $SQL .= "		 `evmahistorico_wc`.`PROCESADO`, ";
		$SQL .= "		 `evmahistorico_wc`.`DATOS`, ";
		$SQL .= "		 `evmahistorico_wc`.`HIST_RL`, ";
		$SQL .= "		 `evmahistorico_wc`.`USER_PROCESS` ";
		$SQL .= "FROM `evmahistorico_wc`,  `almacodigos`, `abmacodigos` ABMc ";
		$SQL .= "WHERE (`evmahistorico_wc`.`FECHAHORA` BETWEEN '$fechai' AND '$fechaf') ";
		$SQL .= "AND (`evmahistorico_wc`.`ORDER_RL` IN ($movil)) ";
		$SQL .= "AND (`almacodigos`.`ORDER_ID` = `evmahistorico_wc`.`EVENTO`) ";
      	$SQL .= "AND (`almacodigos`.`ADM_WEB` = 1) ";
        $SQL .= "AND (`almacodigos`.`VER_WEB` = 1) ";
		if ($process==0) //todos
			$SQL .= "AND (`evmahistorico_wc`.`PROCESADO` <> -1 ) ";
		if ($process==1) //solo no procesados
			$SQL .= "AND (`evmahistorico_wc`.`PROCESADO` = 0) ";
		if ($process==2) //solo procesados
			$SQL .= "AND (`evmahistorico_wc`.`PROCESADO` = 1) ";
		$SQL .= "AND (ABMc.`ORDER_ID` = `evmahistorico_wc`.`ORDER_RL`) ";
		$SQL .= ")UNION (";
		$SQL .= "SELECT `evmahistorico`.`ORDER_RL` as CUENTA,";
		$SQL .= " `evmahistorico`.`FECHAHORA` as FECHA_MENSAJE, ";
		$SQL .= "		if(ABMc.`OBJETIVO`=2,ABMc.`AVL_IDENTIFICADOR`,CONCAT_WS(' - ',ABMc.NOMBRE, ABMc.NOMBRE_DOS) )as MOVIL,";
		$SQL .= "       `evmahistorico`.`DETALLE`, ";
		$SQL .= "       `evmahistorico`.`PROCESADO`, ";
		$SQL .= "		`evmahistorico`.`DATOS`, ";
		$SQL .= "		`evmahistorico`.`HIST_RL`, ";
		$SQL .= "		`evmahistorico`.`USER_PROCESS` ";
		$SQL .= "FROM `evmahistorico`, `almacodigos`, `abmacodigos` ABMc ";
		$SQL .= "WHERE (`evmahistorico`.`FECHAHORA` BETWEEN '$fechai' AND '$fechaf') ";
		$SQL .= "AND (`evmahistorico`.`ORDER_RL` IN ($movil)) ";
		$SQL .= "AND (`almacodigos`.`ORDER_ID` = `evmahistorico`.`EVENTO`) ";
      	$SQL .= "AND (`almacodigos`.`ADM_WEB` = 1) ";
        $SQL .= "AND (`almacodigos`.`VER_WEB` = 1) ";
        if ($process==0) //todos
			$SQL .= "AND (`evmahistorico`.`PROCESADO` <> -1 ) ";
		if ($process==1) //solo no procesados
			$SQL .= "AND (`evmahistorico`.`PROCESADO` = 0) ";
		if ($process==2) //solo procesados
			$SQL .= "AND (`evmahistorico`.`PROCESADO` = 1) ";
		$SQL .= "AND (ABMc.`ORDER_ID` = `evmahistorico`.`ORDER_RL`) ";
		$SQL .= ") ORDER BY FECHA_MENSAJE ASC ";

		if($cantReg!=""){
			$SQL .= " LIMIT $inicio, $cantReg";
		}
        if (!$mysqli->real_query($SQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Eventos' " .$mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
	}

	/**********************************************************************/
    function Consulta_Historico_Avl2($order_id,$fechaInicio,$fechaFin, $ddeRecord, $limite){
	    global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl2' " . mysqli_connect_error());
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $SQL = "call z_consulta_historico_avl('$fechaInicio','$fechaFin',$order_id,$ddeRecord,$limite)";
         $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
        if (!$mysqli->real_query($SQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Avl2' " .$mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/
	function verificarMantenimiento(){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()){
	   	    $LOGGER->addLine('ERROR',"FUNCION: 'verificarMantenimiento' " . mysqli_connect_error());
	        printf("Conexion fallida: %s\n", mysqli_connect_error());
	    	exit();
	    }
		$SQL = "select *, now() as hoy from mantenimiento M where M.activo=1 order by M.`id` DESC LIMIT 1";
		if (!$mysqli->real_query($SQL)){
	      $LOGGER->addLine('ERROR',"FUNCION: 'verificarMantenimiento' " .$mysqli->error.' CONSULTA: '.$SQL);
	      exit();
	    }
		return BykomCliente::getResultado($mysqli);
	}
	/**********************************************************************/
	function verificarSendMail($mailId){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()){
	        $LOGGER->addLine('ERROR',"FUNCION: 'verificarSendMail' " . mysqli_connect_error());
	        printf("Conexion fallida: %s\n", mysqli_connect_error());
	    	exit();
	    }
		$SQL = "select R.`enviado` from `recordatorio` R where R.id=".$mailId;
		if (!$mysqli->real_query($SQL)){
	      	$LOGGER->addLine('ERROR',"FUNCION: 'verificarSendMail' " . $mysqli->error.' CONSULTA: '.$SQL);
	      	exit();
	    }
		return BykomCliente::getResultado($mysqli);
	}
	/**********************************************************************/
	function verificarMailStatus(){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		if (mysqli_connect_errno()){
	        $LOGGER->addLine('ERROR',"FUNCION: 'verificarMailStatus' " . mysqli_connect_error());
	        printf("Conexion fallida: %s\n", mysqli_connect_error());
	    	exit();
	    }
		$SQL = "select emailStatus from emailmessages";
		if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'verificarMailStatus' " . $mysqli->error.' CONSULTA: '.$SQL);
	      exit();
	    }
		return BykomCliente::getResultado($mysqli);
	}

  //**************************************************************************
  //Desglosa un tiempo recibido en milisegundos en formato Dias-Horas-Minutos y Segundos
  function convertMStoDHMS($ms){
  	    $sec = floor($ms/1000);
		$min = floor($sec/60);
		$sec = $sec % 60;
		$t = ((($sec>9)?"":"0").$sec)."s";

		$hr = floor($min/60);
		$min = $min % 60;
		$t = ((($min>9)?"":"0").$min) . "m " . $t;

		$day = floor($hr/60);
		$hr = $hr % 60;
		$t = ((($hr>9)?"":"0").$hr) . "h " . $t;
		$t = $day . "d " . $t;

		return $t;
	}

	/**********************************************************************/
	function Consulta_Historico_Paradas($cuenta,$fechai,$fechaf,$tiempoMM){
		//0) inicializo variables
		$campos = array	('FECHA'=>0, 'TIEMPO'=>1, 'WARNING'=>2, 'OBSERVACIONES'=>3, 'FECHADECORADA'=>4, 'APROXIMACION'=>5, 'LATITUD'=>6, 'LONGITUD'=>7, 'CUENTA'=>8);
		$datos = array();
		$resultado = new cResultado($campos, $datos);
  	    $contadorParadas = 0;
		$posiMovilParada = NULL;
		$warningParada = 0;
		$warningLabel = '';
		$timeParadaAnterior = 0;
		$sumaTimeParada = 0;
		$fila = 0;

		//1) consulto todos los movimientos
		$consulta = BykomCliente::Consulta_Historico_Avl2($cuenta,$fechai,$fechaf,0,10000);
		//2) verifico y genero eventos de parada, imprimiendo sus items.
	    for($i=0; $i<$consulta->cantidad(); $i++ ){
			//a) calculo fecha del mensaje
			$time = strtotime($consulta->campo('FECHA_MENSAJE', $i));
			//b) verificar si esta detenido
			if ($consulta->campo('VELOCIDAD', $i)==0){
				if ($timeParadaAnterior==0){
					$timeParadaAnterior = $time;
					$posiMovilParada = $i;
				}
				$sumaTimeParada += ($time - $timeParadaAnterior);
				$timeParadaAnterior = $time;
			}
			//c) generar WARNING's
			//NIVEL 1 >> La distancia entre la para anterior y la nueva es mayor a 200mts siendo que el movil estubo con velocidades 0 en ambas paradas.
			if(($posiMovilParada!==NULL)&&($sumaTimeParada>0)){
				//calculo distancia entre paradas por PITAGORAS::
	  			$a = pow(($consulta->campo('LATITUD', $i) - $consulta->campo('LATITUD', $posiMovilParada)),2);
		  		$b = pow(($consulta->campo('LONGITUD', $i) - $consulta->campo('LONGITUD', $posiMovilParada)),2);
		  		$c = sqrt($a + $b) * 100 * 1000; //hipotenusa en metros
				if ($c > 200){
					$warningParada = 1;
				 	$warningLabel .= "* El movil dejo de reportar por un tiempo prolongado";
				}
			}
			//d) genero e imprimo la fila, de ser necesario
			if (($consulta->campo('VELOCIDAD', $i)!=0) || ($i== ($consulta->cantidad()-1)) || $warningParada) {
				if (($sumaTimeParada/60)>$tiempoMM){ //HAY QUE IMPRIMIRLO
					$resultado->setCampo('FECHADECORADA', $fila, $consulta->campo('FECHA_MENSAJE', $posiMovilParada));
					$myDate = date('d/m/Y H:i:s',strtotime($consulta->campo('FECHA_MENSAJE', $posiMovilParada)));
					$resultado->setCampo('FECHA', $fila, $myDate.'');
					$timeStop = BykomCliente::convertMStoDHMS($sumaTimeParada*1000);
					$resultado->setCampo('TIEMPO', $fila, $timeStop);
					$contadorParadas++;
					if ($consulta->campo('EDAD_MENSAJE', $posiMovilParada) >= 255) {
						$warningParada = 1;
						$warningLabel .= "* Dato invalido.\n ";
					}
					if ( $posiMovilParada!=NULL){
						$resultado->setCampo('LATITUD', $fila, $consulta->campo('LATITUD', $posiMovilParada));
						$resultado->setCampo('LONGITUD', $fila, $consulta->campo('LONGITUD', $posiMovilParada));
					}
					else {
						$resultado->setCampo('LATITUD', $fila, $consulta->campo('LATITUD', $i));
						$resultado->setCampo('LONGITUD', $fila, $consulta->campo('LONGITUD', $i));
					}
					$resultado->setCampo('WARNING', $fila, $warningParada);
					$aproximacion = BykomCliente::Obtener_Direccion_Abreviada($consulta->campo('APROXIMACION', $posiMovilParada));
					$resultado->setCampo('APROXIMACION', $fila, $aproximacion);
					if ($warningParada)
						$resultado->setCampo('OBSERVACIONES', $fila, $warningLabel);
					$resultado->setCampo('CUENTA', $fila, $cuenta);
					$fila++;
				 }
				 $sumaTimeParada = 0;
				 $timeParadaAnterior = 0;
				 $warningParada = 0;
			 	 $warningLabel = '';
			}
		}
 	   return $resultado;
	}

	function tiempo_segundos($segundos){
		$minutos=$segundos/60;
		$horas=floor($minutos/60);
		$minutos2=$minutos%60;
		$segundos_2=$segundos%60%60%60;
		if($minutos2<10)$minutos2='0'.$minutos2;
		if($segundos_2<10)$segundos_2='0'.$segundos_2;

		if($segundos<60){ /* segundos */
			$resultado= round($segundos).' Segundos';
		}elseif($segundos>60 && $segundos<3600){/* minutos */
			$resultado= $minutos2.':'.$segundos_2.' Minutos';
		}else{/* horas */
			$resultado= $horas.':'.$minutos2.':'.$segundos_2.' Horas';
		}
		return $resultado;
	}
	function cierroViaje($indice, $cuenta, $metrosViaje, $tiempoViaje, $sumaTiempoParada, $vListadoPuntos, $fechaInicio, $fechaFinViaje){
		$viaje = new Viajes();
		$viaje->id = $indice;
		$viaje->movil = $cuenta;
		$viaje->fechaIni = $fechaInicio;
		$viaje->fechaFin = $fechaFin;
		$viaje->km =$metrosViaje;
		$viaje->tiempo = $tiempoViaje;
		$viaje->tiempoDetenido = $sumaTiempoParada;
		$viaje->vListadoPuntos = $vListadoPuntos;
		return $viaje;
	}

	function Hipotenusa2($consulta,$i,$j){

		$a = pow(($consulta->campo('LATITUD', $i) - $consulta->campo('LATITUD', $j)),2);
  		$b = pow(($consulta->campo('LONGITUD', $i) - $consulta->campo('LONGITUD', $j)),2);
  		$c = sqrt($a + $b) * 100 * 1000; //hipotenusa en metros
  		return $c;
	}

	function Hipotenusa($aLAT,$bLAT,$aLON,$bLON){
		$R = 6371;
		$lat1 = quitCero($aLAT);
      	$lon1 = quitCero($aLON);
   		$lat2 = quitCero($bLAT);
   		$lon2 = quitCero($bLON);
  		$dLat = ($lat1-$lat2) * (pi() / 180);
      	$dLon = ($lon1-$lon2) * (pi() / 180);
      	$a = pow(sin($dLat/2),2) +
      	 	cos($lat1 * pi()/180) * cos($lat2 * pi()/180) *
      	 	pow(sin($dLon/2),2);
      	$res = 2 * atan2(sqrt($a), sqrt(1-$a));
      	$c = $R * $res;
  		return $c;
	}
	/************************VIAJES*******************************************/
function Consulta_Historico_Viajes2($cuenta,$fechai,$fechaf,$tiempoMM){
		global $LOGGER;
		$LOGGER->addLine('INFO', "********COMIENZO VIAJES*********");
		$filtrarCeros  = 0;
		$consulta = BykomCliente::Consulta_Historico_Avl_Total_Test($cuenta,$fechai,$fechaf,0,10000,$filtrarCeros,false);
	    $resultadoViajes = array();
	    $vListadoPuntos = array();

	    $comienzoViaje 		= true;
	    $sumaTiempoViaje	= 0;
	    $metrosPorHipotenusa= 0;
	    $finViaje 			= false;
	    $fechaComienzoViaje = -1;
	    $indice 			= 1;
	    $i					= 0;
	    $metrosViajes 		= 0;
	    $ultimo				= $consulta->cantidad()-1;
		while($i < $ultimo){
			if($consulta->campo('EDAD_MENSAJE',$i)>=255 || $consulta->campo('EDAD_MENSAJE',$i) < 0
				|| $consulta->campo('LATITUD',$i) == '0' || $consulta->campo('LONGITUD',$i) == '0'){
				$i++;
				continue;
			}
			if ($fechaComienzoViaje == -1) {
				$fechaComienzoViaje = $consulta->campo('FECHA_MENSAJE', $i);
			}
			$j = $i+1;
			//a) calculo fecha del mensaje
			$timeP1 = strtotime($consulta->campo('FECHA_MENSAJE', $i));
			$timeP2 = strtotime($consulta->campo('FECHA_MENSAJE', $j));
			if ($comienzoViaje && $consulta->campo('VELOCIDAD', $i) != 0){//si comienza un viaje con velocidad 0 hago que entre en el ELSE de abajo
				$comienzoViaje = false;
			}
  			$cantPuntos++;

  			$oPunto	= new stdClass();
			$oPunto->movil 		= $cuenta;
			$oPunto->longitud 	= quitCero($consulta->campo('LONGITUD', $i));
			$oPunto->latitud 	= quitCero($consulta->campo('LATITUD', $i));
			$oPunto->id 		= $consulta->campo('ORDER_ID',$i);
        	$oPunto->velocidad 	= $consulta->campo('VELOCIDAD',$i);
        	$oPunto->sentido 	= $consulta->campo('SENTIDO',$i);
        	$oPunto->sentidoPalabra = BykomCliente::Obtener_Palabra_Sentido($consulta->campo('SENTIDO',$i));
        	$oPunto->satelites 	= $consulta->campo('SATELITES',$i);
        	$oPunto->direccionAbrev = BykomCliente::Obtener_Direccion_Abreviada($consulta->campo('APROXIMACION',$i));
        	$oPunto->evento 	= $consulta->campo('EVENTO',$i);
        	$oPunto->validez 	= BykomCliente::Obtener_Palabra_Validez($consulta->campo('VALIDEZ',$i));
        	$oPunto->fechaMensaje 	= $consulta->campo('FECHA_MENSAJE',$i);
        	$oPunto->fechaRecibido 	= $consulta->campo('FECHA_RECIBIDO',$i);
        	$oPunto->statusZona = $consulta->campo('STATUS_ZONA',$i);
        	$oPunto->edadMensaje= $consulta->campo('EDAD_MENSAJE',$i);
        	$oPunto->soloLogistica = $consulta->campo('SOLO_LOGISTICA2',$i);
        	if ($oPunto->soloLogistica == false) {
				$oPunto->codigoAlfa = htmlentities($consulta->campo('COD_ALFA',$i));
        	}
			else {
        		$oPunto->codigoAlfa = "";
        	}
			if ($oPunto->statusZona == 390) {
        		$oPunto->zonaProhibida = $consulta->campo('ZONA', $i);
        	}
			$vListadoPuntos[]	= $oPunto;
			//Posible viaje
			//Si no es comienzo de viaje y hay velocidad = 0, voy a empezar a contar el tiempo parado o hay distancia mayor a 200mts
			//Ej:(Inicio)o---o(v=0)---o----o---o(final) � Ej:(Inicio)o---o---o(v=0)----o---o(final) �
			//Ej:(Inicio)o---o---o----o(v=0)---o(final) � Ej:(Inicio)o---o---o----o---o(v=0)(final)
			if(!$comienzoViaje && $consulta->campo('VELOCIDAD', $i) == 0 ){
				$sumaTiempoParada = 0;
				$h = $j;
				while (true) {
					$cantPuntos++;
					if($h < $ultimo && ($consulta->campo('EDAD_MENSAJE',$h)>=255 || $consulta->campo('EDAD_MENSAJE',$h) < 0
						|| $consulta->campo('LATITUD',$h) == '0' || $consulta->campo('LONGITUD',$h) == '0') ){
						$h++;
						continue;
					}
					$hipotenusa 		= BykomCliente::Hipotenusa($consulta->campo('LATITUD', $i),$consulta->campo('LATITUD', $h),$consulta->campo('LONGITUD', $i),$consulta->campo('LONGITUD', $h)); //hipotenusa en metros
					$timeP1Aux 			= strtotime($consulta->campo('FECHA_MENSAJE', $i));
					$timeP2Aux 			= strtotime($consulta->campo('FECHA_MENSAJE', $h));
					$sumaTiempoViaje 	+= ($timeP2Aux - $timeP1Aux);
					$metrosViaje 		+= $hipotenusa;
					$sumaTiempoParada 	+= ($timeP2Aux - $timeP1Aux);
					$oPunto				= new stdClass();
					$oPunto->movil 		= $cuenta;
					$oPunto->longitud 	= quitCero($consulta->campo('LONGITUD', $h));
					$oPunto->latitud 	= quitCero($consulta->campo('LATITUD', $h));
					$oPunto->id 		= $consulta->campo('ORDER_ID',$h);
		        	$oPunto->velocidad 	= $consulta->campo('VELOCIDAD',$h);
		        	$oPunto->sentido 	= $consulta->campo('SENTIDO',$h);
		        	$oPunto->sentidoPalabra = BykomCliente::Obtener_Palabra_Sentido($consulta->campo('SENTIDO',$h));
		        	$oPunto->satelites 	= $consulta->campo('SATELITES',$h);
		        	$oPunto->direccionAbrev = BykomCliente::Obtener_Direccion_Abreviada($consulta->campo('APROXIMACION',$h));
		        	$oPunto->evento 	= $consulta->campo('EVENTO',$h);
		        	$oPunto->validez 	= BykomCliente::Obtener_Palabra_Validez($consulta->campo('VALIDEZ',$h));
		        	$oPunto->fechaMensaje 	= $consulta->campo('FECHA_MENSAJE',$h);
		        	$oPunto->fechaRecibido 	= $consulta->campo('FECHA_RECIBIDO',$h);
		        	$oPunto->statusZona = $consulta->campo('STATUS_ZONA',$h);
		        	$oPunto->edadMensaje= $consulta->campo('EDAD_MENSAJE',$h);
		        	$oPunto->soloLogistica = $consulta->campo('SOLO_LOGISTICA2',$h);
		        	if ($oPunto->soloLogistica == false) {
						$oPunto->codigoAlfa = htmlentities($consulta->campo('COD_ALFA',$h));
		        	}else {
		        		$oPunto->codigoAlfa = "";
		        	}
					if ($oPunto->statusZona == 390) {
		        		$oPunto->zonaProhibida = $consulta->campo('ZONA', $h);
		        	}
					$vListadoPuntos[]	= $oPunto;
					if( ($consulta->campo('VELOCIDAD', $h)==0 && $hipotenusa > 200 ) ||
						($consulta->campo('VELOCIDAD', $h) != 0 && $sumaTiempoParada > 180) || $h == $ultimo){
						$finViaje 		= true;
						$fechaFinViaje 	= $consulta->campo('FECHA_MENSAJE', $h);
						break;
					}
					if($consulta->campo('VELOCIDAD', $h) != 0){
						$sumaTiempoParada = 0;
					}
					$i++;
					$h++;
				}
				$i = $h;
			}else{
				//(I)o(<-)---o---o----o----o(F) � (I)o(v!=0)---o---o----o----o(F) �
				//(I)o---o(v!=0)---o----o----o(F) � (I)o---o---o----o----o(<-)(F)
				$metrosEntrePuntos = BykomCliente::Hipotenusa($consulta->campo('LATITUD', $i),$consulta->campo('LATITUD', $j),$consulta->campo('LONGITUD', $i),$consulta->campo('LONGITUD', $j)); //hipotenusa en metros
				$metrosViaje 		+= $metrosEntrePuntos;
				$sumaTiempoViaje 	+= ($timeP2 - $timeP1);
				$i++;
				if($i == $ultimo){
					$finViaje 		= true;
					$fechaFinViaje 	= $consulta->campo('FECHA_MENSAJE', $i);
				}
			}
			if (!$comienzoViaje && $finViaje) {
				/*if($indice!=1 ){//guardo el ultimo punto del viaje anterior como primero del siguiente y sumo la distancia entre esos puntos
					$ultimoPuntoViajeAnterior = $viaje->vListadoPuntos[count($viaje->vListadoPuntos)-1];
					$primerPuntoViajeSiguiente = $vListadoPuntos[0];
					$metrosViaje += BykomCliente::Hipotenusa($ultimoPuntoViajeAnterior->latitud,$primerPuntoViajeSiguiente->latitud,$ultimoPuntoViajeAnterior->longitud,$primerPuntoViajeSiguiente->longitud); //hipotenusa en metros
					array_unshift($vListadoPuntos, $ultimoPuntoViajeAnterior);//pone en primer lugar del array un elemento
				}*/
				$viaje 			= new Viajes();
				$viaje->id 		= $indice;
				$viaje->movil 	= $cuenta;
				$viaje->fechaIni= $fechaComienzoViaje;
				$viaje->fechaFin= $fechaFinViaje;
				$viaje->km 		= round($metrosViaje,2);
				$viaje->tiempo 	= timePassed($sumaTiempoViaje);
				/*
				$time1 = strtotime($fechaComienzoViaje);$time2 = strtotime($fechaFinViaje);
				$tiempoViaje = ($time2 - $time1);
				$viaje->tiempo 	= timePassed($tiempoViaje);
				*/
				$viaje->tiempoDetenido 	= $sumaTiempoParada;
				$viaje->vListadoPuntos 	= $vListadoPuntos;
				$resultadoViajes[]  = $viaje;
				$indice++;
				$sumaTiempoViaje 	= 0;
				$metrosViaje 		= 0;
				$sumaTiempoParada 	= 0;
				$vListadoPuntos 	= array();
				$comienzoViaje 		= true;
				$fechaComienzoViaje = $fechaFinViaje;
				$finViaje 			= false;
			}
		}
		if(($h<$ultimo) && $consulta->campo('EDAD_MENSAJE',$i)<255 && $consulta->campo('EDAD_MENSAJE',$i) >= 0
			&& $consulta->campo('LATITUD',$i) != '0' && $consulta->campo('LONGITUD',$i)	!= '0'){
			$h = $i-1;
	  		$hipotenusa = BykomCliente::Hipotenusa($consulta->campo('LATITUD', $h),$consulta->campo('LATITUD', $i),$consulta->campo('LONGITUD', $h),$consulta->campo('LONGITUD', $i)); //hipotenusa en metros
	  		//echo $consulta->campo('FECHA_MENSAJE', $i)."\n";echo $consulta->campo('FECHA_MENSAJE', $h);
	  		$metrosTotales += $hipotenusa;
	  		$oPunto	= new stdClass();
	  		$oPunto->movil 		= $cuenta;
			$oPunto->longitud 	= quitCero($consulta->campo('LONGITUD', $i));
			$oPunto->latitud 	= quitCero($consulta->campo('LATITUD', $i));
			$oPunto->id 		= $consulta->campo('ORDER_ID',$i);
        	$oPunto->velocidad 	= $consulta->campo('VELOCIDAD',$i);
        	$oPunto->sentido 	= $consulta->campo('SENTIDO',$i);
        	$oPunto->sentidoPalabra = BykomCliente::Obtener_Palabra_Sentido($consulta->campo('SENTIDO',$i));
        	$oPunto->satelites 	= $consulta->campo('SATELITES',$i);
        	$oPunto->direccionAbrev = BykomCliente::Obtener_Direccion_Abreviada($consulta->campo('APROXIMACION',$i));
        	$oPunto->evento 	= $consulta->campo('EVENTO',$i);
        	$oPunto->validez 	= BykomCliente::Obtener_Palabra_Validez($consulta->campo('VALIDEZ',$i));
        	$oPunto->fechaMensaje 	= $consulta->campo('FECHA_MENSAJE',$i);
        	$oPunto->fechaRecibido 	= $consulta->campo('FECHA_RECIBIDO',$i);
        	$oPunto->statusZona = $consulta->campo('STATUS_ZONA',$i);
        	$oPunto->edadMensaje= $consulta->campo('EDAD_MENSAJE',$i);
        	$oPunto->soloLogistica = $consulta->campo('SOLO_LOGISTICA2',$i);
        	if ($oPunto->soloLogistica == false) {
				$oPunto->codigoAlfa = htmlentities($consulta->campo('COD_ALFA',$i));
        	}else{
        		$oPunto->codigoAlfa = "";
        	}
			if ($oPunto->statusZona == 390) {
        		$oPunto->zonaProhibida = $consulta->campo('ZONA', $i);
        	}
			$resultadoViajes[count($resultadoViajes)-1]->km += round($hipotenusa,2);
			$lP 				= $resultadoViajes[count($resultadoViajes)-1]->vListadoPuntos;
			$lP[]				= $oPunto;
			$resultadoViajes[count($resultadoViajes)-1]->vListadoPuntos = $lP;
		}
		//print_r($resultadoViajes[count($resultadoViajes)-1]);
		//print_r($resultadoViajes);
		$LOGGER->addLine('INFO', 'viajes: '.$resultadoViajes);
 	   	return $resultadoViajes;
	}
	function Consulta_Historico_Viajes($cuenta,$fechai,$fechaf,$tiempoMM){
		global $LOGGER;
		$LOGGER->addLine('INFO', "********COMIENZO VIAJES*********");
		//1) consulto todos los movimientos
		//$consulta = BykomCliente::Consulta_Historico_Avl2($cuenta,$fechai,$fechaf,0,10000);
		$filtrarCeros  = 0;
		$consulta = BykomCliente::Consulta_Historico_Avl_Total_Test($cuenta,$fechai,$fechaf,0,10000,$filtrarCeros);
		//var_dump($consulta->cantidad());
		//2) verifico y genero eventos de parada, imprimiendo sus items.
	    $resultadoViajes = array();
	    $vListadoPuntos = array();

	    $comienzoViaje 		= true;
	    $sumaTiempoViaje	= 0;
	    $metrosPorHipotenusa= 0;
	    $finViaje 			= false;
	    $fechaComienzoViaje = -1;
	    $indice 			= 1;
	    $i					= 0;
	    $metrosViajes 		= 0;
	    $metrosTotales		= 0;//se usa para testear=> nada mas!!!se puede borrar
	    $cantPuntos			= 0;//se usa para testear=> nada mas!!!se puede borrar
	    $ultimo				= $consulta->cantidad()-1;
		while ($i < $ultimo){
			if($consulta->campo('EDAD_MENSAJE',$i)>=255 || $consulta->campo('EDAD_MENSAJE',$i) < 0
				|| $consulta->campo('LATITUD',$i) == '0' || $consulta->campo('LONGITUD',$i) == '0'){
				$i++;
				continue;
			}
			if ($fechaComienzoViaje == -1) {
				$fechaComienzoViaje = $consulta->campo('FECHA_MENSAJE', $i);
			}
			$j = $i+1;
			//a) calculo fecha del mensaje
			$timeP1 = strtotime($consulta->campo('FECHA_MENSAJE', $i));
			$timeP2 = strtotime($consulta->campo('FECHA_MENSAJE', $j));
			//Descarto velocidades = 0 iniciales
			if ($comienzoViaje && $consulta->campo('VELOCIDAD', $i) != 0){
				$comienzoViaje = false;
			}
  			$metrosEntrePuntos = BykomCliente::Hipotenusa($consulta->campo('LATITUD', $i),$consulta->campo('LATITUD', $j),$consulta->campo('LONGITUD', $i),$consulta->campo('LONGITUD', $j)); //hipotenusa en metros
  			$cantPuntos++;
			//Posible viaje
			if(!$comienzoViaje && $consulta->campo('VELOCIDAD', $i) == 0) {
				$sumaTiempoParada = 0;
				$h = $j;
				while (true) {
					$cantPuntos++;
					if($h < $ultimo && ($consulta->campo('EDAD_MENSAJE',$h)>=255 || $consulta->campo('EDAD_MENSAJE',$h) < 0
						|| $consulta->campo('LATITUD',$h) == '0' || $consulta->campo('LONGITUD',$h) == '0') ){
						$h++;
						continue;
					}
					$hipotenusa = BykomCliente::Hipotenusa($consulta->campo('LATITUD', $i),$consulta->campo('LATITUD', $h),$consulta->campo('LONGITUD', $i),$consulta->campo('LONGITUD', $h)); //hipotenusa en metros
					if ($hipotenusa > 200 || ($consulta->campo('VELOCIDAD', $h) != 0 && $sumaTiempoParada > 180) )  {
						$finViaje 		= true;
						$fechaFinViaje 	= $consulta->campo('FECHA_MENSAJE', $i);
						break;
					}

					$timeP1Aux 			= strtotime($consulta->campo('FECHA_MENSAJE', $i));
					$timeP2Aux 			= strtotime($consulta->campo('FECHA_MENSAJE', $h));
					$sumaTiempoViaje 	+= ($timeP2Aux - $timeP1Aux);
					$metrosViaje 		+= $hipotenusa;
					$sumaTiempoParada 	+= ($timeP2Aux - $timeP1Aux);
					$oPunto				= new stdClass();
					$oPunto->longitud 	= quitCero($consulta->campo('LONGITUD', $h));
					$oPunto->latitud 	= quitCero($consulta->campo('LATITUD', $h));
					$vListadoPuntos[]	= $oPunto;
					if($h == $ultimo){
						$finViaje 		= true;
						$fechaFinViaje 	= $consulta->campo('FECHA_MENSAJE', $h);
						break;
					}
					$i++;
					$h++;
				}
				$i = $h;
			}else{
				$metrosViaje 		+= $metrosEntrePuntos;
				$oPunto	= new stdClass();
				$oPunto->longitud 	= quitCero($consulta->campo('LONGITUD', $i));
				$oPunto->latitud 	= quitCero($consulta->campo('LATITUD', $i));
			}

				$vListadoPuntos[]	= $oPunto;
			$sumaTiempoViaje 	+= ($timeP2 - $timeP1);
			if (!$comienzoViaje && $finViaje) {
				if($indice!=1){
					$ultimoPuntoViajeAnterior = $viaje->vListadoPuntos[count($viaje->vListadoPuntos)-1];
					$primerPuntoViajeSiguiente = $vListadoPuntos[count($vListadoPuntos)-1];
					//$metrosViaje += BykomCliente::Hipotenusa($ultimoPuntoViajeAnterior->latitud,$primerPuntoViajeSiguiente->latitud,$ultimoPuntoViajeAnterior->longitud,$primerPuntoViajeSiguiente->longitud); //hipotenusa en metros
					array_unshift($vListadoPuntos, $ultimoPuntoViajeAnterior);
				}
				$viaje 			= new Viajes();
				$viaje->id 		= $indice;
				$viaje->movil 	= $cuenta;
				$viaje->fechaIni= $fechaComienzoViaje;
				$viaje->fechaFin= $fechaFinViaje;
				$viaje->km 		= round($metrosViaje,2);
				$viaje->tiempo 	= timePassed($sumaTiempoViaje);
				$viaje->tiempoDetenido 	= $sumaTiempoParada;
				$viaje->vListadoPuntos 	= $vListadoPuntos;
				//print_r($vListadoPuntos);
				$resultadoViajes[]  = $viaje;
				$indice++;
				$sumaTiempoViaje 	= 0;
				$metrosViaje 		= 0;
				$sumaTiempoParada 	= 0;
				$vListadoPuntos 	= array();
				$comienzoViaje 		= true;
				$fechaComienzoViaje = $fechaFinViaje;
				$finViaje 			= false;
			}
			$i++;
		}
		if($consulta->campo('EDAD_MENSAJE',$i)<255 && $consulta->campo('EDAD_MENSAJE',$i) >= 0
			&& $consulta->campo('LATITUD',$i) != '0' && $consulta->campo('LONGITUD',$i)	!= '0'){
	  		$hipotenusa = BykomCliente::Hipotenusa($consulta->campo('LATITUD', $h),$consulta->campo('LATITUD', $i),$consulta->campo('LONGITUD', $h),$consulta->campo('LONGITUD', $i)); //hipotenusa en metros
	  		$metrosTotales += $hipotenusa;
	  		//echo "Dist: $hipotenusa**h:$h**i:$i**mts Tot: $metrosTotales\n";
	  		//echo "Dist viaje: ".$resultadoViajes[count($resultadoViajes)-1]->km."\n";
	  		$oPunto	= new stdClass();
			$oPunto->longitud 	= quitCero($consulta->campo('LONGITUD', $i));
			$oPunto->latitud 	= quitCero($consulta->campo('LATITUD', $i));
			$resultadoViajes[count($resultadoViajes)-1]->km += round($hipotenusa,2);
			$lP 				= $resultadoViajes[count($resultadoViajes)-1]->vListadoPuntos;
			$lP[]				= $oPunto;
			$resultadoViajes[count($resultadoViajes)-1]->vListadoPuntos = $lP;
		}
		//print_r($resultadoViajes);
		//print_r(round($metrosTotales,2));
		//var_dump($cantPuntos);
		$LOGGER->addLine('INFO', 'viajes: '.$resultadoViajes);
 	   	return $resultadoViajes;
	}
	/**********************************************************************/
    function Consulta_Publicidad($cuentaId, $objetivo){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
	        $LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Publicidad' " . mysqli_connect_error());
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }

        $SQL = "select P.`id` as publicidadId, ";
		$SQL.= "	   C.`canCheckPublicidad` as canCheck ";
		$SQL.= "from `publicidad` P, `wcconfig` C ";
		$SQL.= "where C.`publicidad` AND ";
		$SQL.= "      P.`activa` AND ";
		$SQL.= "      P.id NOT IN (select PU.publicidadFk ";
		$SQL.= "                  from `publicidad_user` PU ";
		$SQL.= "                  where PU.`publicidadFk` = P.id and ";
		$SQL.= "                        PU.`objetivo` = $objetivo and ";
		$SQL.= "                        PU.`tablaId` = $cuentaId)";

        if (!$mysqli->real_query($SQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Publicidad' " . $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
		$LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
        return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    function Cargar_Publicidad($publicidadId){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
          	$LOGGER->addLine('ERROR',"FUNCION: 'Cargar_Publicidad' " . mysqli_connect_error());
           	exit();
        }
        $SQL = "select * ";
		$SQL.= "from `publicidad` P ";
		$SQL.= "where P.`id` = $publicidadId";

        if (!$mysqli->real_query($SQL)){
          	$LOGGER->addLine('ERROR',"FUNCION: 'Cargar_Publicidad' " . $mysqli->error.' CONSULTA: '.$SQL);
            exit();
        }
		$LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
        return BykomCliente::getResultado($mysqli);
    }
	/**********************************************************************/
   function SaveCheck_Publicidad($publicidadId, $cuenta, $objetivo){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'SaveCheck_Publicidad' " . mysqli_connect_error());
            exit();
        }

        $SQL = "INSERT INTO `publicidad_user` (`tablaId`,`objetivo`,`publicidadFk`) ";
		$SQL.= "VALUES ($cuenta, $objetivo, $publicidadId)";

        if (!$mysqli->real_query($SQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'SaveCheck_Publicidad' " . $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
		$LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
        return BykomCliente::getResultado($mysqli);
    }

	/**********************************************************************/
    // persiste un elemento en la tabla 'georeference'
	function PersistirGeoReference($id, $lat, $lon){
	 	 global $LOGGER;
		 if(($id=='')||($id==null)){
		 	return (0);
		 }
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if(mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirGeoReference' " . mysqli_connect_error());
	       	return (0);
	     }
		 $SQL = "SELECT * FROM georeference WHERE SYS2015 = '$id'";
		 if (!$mysqli->real_query($SQL)){
		 	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirGeoReference' " . $mysqli->error.' CONSULTA: '.$SQL);
	     	return (0);
	     }
		 $resultado = BykomCliente::getResultado($mysqli);

		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirGeoReference' " . mysqli_connect_error());
	        return (0);
	     }
		 if ($resultado->cantidad() == 0) { //ES UN INSERT
		 	$SQL = "INSERT INTO georeference(`SYS2015`, `LATITUD`, `LONGITUD`) ";
			$SQL .= "VALUES ('$id', '$lat', '$lon');";
		 }else{
		 	$SQL = "UPDATE georeference SET ";
			$SQL .= "georeference.`LATITUD`='$lat', ";
			$SQL .= "georeference.`LONGITUD`='$lon' ";
			$SQL .= " WHERE georeference.`SYS2015` = '$id'";
		 }
	     if (!$mysqli->real_query($SQL)){
		  	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirGeoReference' " . $mysqli->error.' CONSULTA: '.$SQL);
	       	return (0);
	     }
		 $mysqli->close();
	     return (1);
    }

	/**************************************************************************************/
	function Comandos_Cliente($clienteId, $objetivo){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'Comandos_Cliente' " . mysqli_connect_error());
	       	printf("Conexion fallida: %s\n", mysqli_connect_error());
	       	exit();
	     }
	     $SQL = "SELECT cmd.ORDER_ID as ID, cmd.COMANDO as COMANDO, cmd.DESCRIPCION as DESCRIPCION "
	           ." FROM comandos_cliente cmd WHERE cmd.CUENTA_ID = $clienteId AND cmd.OBJETIVO = $objetivo";
	     $LOGGER->addLine('DEBUG', $mysqli->error.' CONSULTA: '.$SQL);
	     if (!$mysqli->real_query($SQL)) {
	       $LOGGER->addLine('ERROR',"FUNCION: 'Comandos_Cliente' " . $mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
	     return BykomCliente::getResultado($mysqli);
    }

    /**********************************************************************/
	function Obtener_Ultima_Medicion_Analogica($cuentaId, $sensorId, $columna){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
           $LOGGER->addLine('ERROR',"FUNCION: 'Obtener_Ultima_Medicion_Analogica' " . mysqli_connect_error());
           printf("Conexion fallida: %s\n", mysqli_connect_error());
           exit();
        }

        $tabla = "historico_med_" . date("ym");
        /*$SQL = "SELECT tabla.VALOR2 as consumoActual, " .
       				   "tabla.FECHA_MENSAJE as consumoActualFecha " .
				" FROM " . $tabla . " tabla " .
				" WHERE tabla.ORDER_RL = " . $cuentaId . " AND tabla.TIPO_SENSOR = 3 " .
				" AND tabla.`FECHA_GMT` = (select MAX(tabla2.`FECHA_GMT`) " .
											" FROM " . $tabla . " tabla2 " .
										    " WHERE tabla2.ORDER_RL = " . $cuentaId .
											" AND tabla2.TIPO_SENSOR = 3)";*/
		$SQL = "SELECT tabla.$columna as medicion, " .
       				   "tabla.FECHA_MENSAJE as fechaMedicion " .
				" FROM " . $tabla . " tabla " .
				" WHERE tabla.ORDER_RL = " . $cuentaId . " AND tabla.TIPO_SENSOR = $sensorId " .
				" AND tabla.`FECHA_GMT` = (select MAX(tabla2.`FECHA_GMT`) " .
											" FROM " . $tabla . " tabla2 " .
										    " WHERE tabla2.ORDER_RL = " . $cuentaId .
											" AND tabla2.TIPO_SENSOR = $sensorId)";

        $LOGGER->addLine('DEBUG', ' CONSULTA: '.$SQL);
        try{
        	$mysqli->real_query($SQL);
        	return BykomCliente::getResultado($mysqli);
        }catch(Exception $e){
        	 $LOGGER->addLine('ERROR',"FUNCION: 'Obtener_Ultima_Medicion_Analogica' " . $mysqli->error.' CONSULTA: '.$SQL);
        }
        return null;
    }

    function Consulta_Historico_Mediciones($cuenta,$fechai,$fechaf,$tipoSensor){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Mediciones' " . mysqli_connect_error());
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }

        $SQL = "call z_consulta_mediciones('$fechai','$fechaf',$cuenta,$tipoSensor)";
        $LOGGER->addLine('DEBUG', ' CONSULTA: '.$SQL);
        if (!$mysqli->real_query($SQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Historico_Mediciones' " . $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }

	/**MEDICIONES ANALOGICAS*********************************************************************/
	function Consulta_ControlaSensorAnalogico($cuentaId, $sensorId) {
		global $LOGGER;
    	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	 	 if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_ControlaSensorAnalogico' " . mysqli_connect_error());
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }

		$SQL = "select abrl.ORDER_ID from abrlsensores abrl WHERE abrl.TIPO = $sensorId AND abrl.ORDER_RL = " . $cuentaId;
		$LOGGER->addLine('DEBUG', ' CONSULTA Controla Sensor analogico: '.$SQL);
		if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_ControlaSensorAnalogico' " . $mysqli->error.' CONSULTA: Controla Sensor analogico '.$SQL);
      		$mysqli->close();
      		return false;
    	}
		$resultado =  BykomCliente::getResultado($mysqli);
		$mysqli->close();
		if ($resultado->cantidad() > 0) return true;
		return false;
	}

	//test mediciones digitales en una sola consulta a travez de left joins...
	function Consulta_ControlaSensores($cuentaId) {
		global $LOGGER;
    	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
		 if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_ControlaSensores' " . mysqli_connect_error());
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
		$SQL = " select if(isnull(abrlP1.SENSOR_ID), -1, abrlP1.SENSOR_ID)  as puerta1, " .
				       "if(isnull(abrlP1.SENSOR_ID), -1, abrlP1.FACTOR) as puerta1Factor, " .
				       "if(isnull(abrlP1.SENSOR_ID), -1, abrlP1.MINIMO) as puerta1Minimo, " .
				       "if(isnull(abrlP1.SENSOR_ID), -1, abrlP1.MAXIMO) as puerta1Maximo, " .

				       "if(isnull(abrlP2.SENSOR_ID), -1, abrlP2.SENSOR_ID) as puerta2, " .
				       "if(isnull(abrlP2.SENSOR_ID), -1, abrlP2.FACTOR) as puerta2Factor, " .
				       "if(isnull(abrlP2.SENSOR_ID), -1, abrlP2.MINIMO) as puerta2Minimo, " .
				       "if(isnull(abrlP2.SENSOR_ID), -1, abrlP2.MAXIMO) as puerta2Maximo, " .

				       "if(isnull(abrlP3.SENSOR_ID), -1, abrlP3.SENSOR_ID) as puerta3, " .
				       "if(isnull(abrlP3.SENSOR_ID), -1, abrlP3.FACTOR) as puerta3Factor, " .
				       "if(isnull(abrlP3.SENSOR_ID), -1, abrlP3.MINIMO) as puerta3Minimo, " .
				       "if(isnull(abrlP3.SENSOR_ID), -1, abrlP3.MAXIMO) as puerta3Maximo, " .

				       "if(isnull(abrlP4.SENSOR_ID), -1, abrlP4.SENSOR_ID) as puerta4, " .
				       "if(isnull(abrlP4.SENSOR_ID), -1, abrlP4.FACTOR) as puerta4Factor, " .
				       "if(isnull(abrlP4.SENSOR_ID), -1, abrlP4.MINIMO) as puerta4Minimo, " .
				       "if(isnull(abrlP4.SENSOR_ID), -1, abrlP4.MAXIMO) as puerta4Maximo, " .

				       "if(isnull(abrlP5.SENSOR_ID), -1, abrlP5.SENSOR_ID) as puerta5, " .
				       "if(isnull(abrlP5.SENSOR_ID), -1, abrlP5.FACTOR) as puerta5Factor, " .
				       "if(isnull(abrlP5.SENSOR_ID), -1, abrlP5.MINIMO) as puerta5Minimo, " .
				       "if(isnull(abrlP5.SENSOR_ID), -1, abrlP5.MAXIMO) as puerta5Maximo, " .

				       "if(isnull(abrlP6.SENSOR_ID), -1, abrlP6.SENSOR_ID) as puerta6, " .
				       "if(isnull(abrlP6.SENSOR_ID), -1, abrlP6.FACTOR) as puerta6Factor, " .
				       "if(isnull(abrlP6.SENSOR_ID), -1, abrlP6.MINIMO) as puerta6Minimo, " .
				       "if(isnull(abrlP6.SENSOR_ID), -1, abrlP6.MAXIMO) as puerta6Maximo, " .

				       "if(isnull(abrlP7.SENSOR_ID), -1, abrlP7.SENSOR_ID) as puerta7, " .
				       "if(isnull(abrlP7.SENSOR_ID), -1, abrlP7.FACTOR) as puerta7Factor, " .
				       "if(isnull(abrlP7.SENSOR_ID), -1, abrlP7.MINIMO) as puerta7Minimo, " .
				       "if(isnull(abrlP7.SENSOR_ID), -1, abrlP7.MAXIMO) as puerta7Maximo, " .

				       "if(isnull(abrlP8.SENSOR_ID), -1, abrlP8.SENSOR_ID) as puerta8, " .
				       "if(isnull(abrlP8.SENSOR_ID), -1, abrlP8.FACTOR) as puerta8Factor, " .
				       "if(isnull(abrlP8.SENSOR_ID), -1, abrlP8.MINIMO) as puerta8Minimo, " .
				       "if(isnull(abrlP8.SENSOR_ID), -1, abrlP8.MAXIMO) as puerta8Maximo, " .

				       "if(isnull(abrlLO.SENSOR_ID), -1, abrlLO.SENSOR_ID) as libreOcupado, " .
				       "if(isnull(abrlLO.SENSOR_ID), -1, abrlLO.FACTOR) as factorLibreOcupado, " .
				       "if(isnull(abrlLO.SENSOR_ID), -1, abrlLO.MINIMO) as minimoLibreOcupado, " .
				       "if(isnull(abrlLO.SENSOR_ID), -1, abrlLO.MAXIMO) as maximoLibreOcupado, " .

				       "if(isnull(abrlPP.SENSOR_ID), -1, abrlPP.SENSOR_ID) as prepanico, " .
				       "if(isnull(abrlPP.SENSOR_ID), -1, abrlPP.FACTOR) as factorPrepanico, " .
				       "if(isnull(abrlPP.SENSOR_ID), -1, abrlPP.MINIMO) as minimoPrepanico, " .
				       "if(isnull(abrlPP.SENSOR_ID), -1, abrlPP.MAXIMO) as maximoPrepanico, " .

				       "if(isnull(abrlEN.SENSOR_ID), -1, abrlEN.SENSOR_ID) as enganche, " .
					   "if(isnull(abrlEN.SENSOR_ID), -1, abrlEN.FACTOR) as factorEnganche, " .
				       "if(isnull(abrlEN.SENSOR_ID), -1, abrlEN.MINIMO) as minimoEnganche, " .
				       "if(isnull(abrlEN.SENSOR_ID), -1, abrlEN.MAXIMO) as maximoEnganche, " .

				       "if(isnull(abrlCD.`ORDER_ID`), false, true) as caudalimetro, " .
				       "if(isnull(abrlTN.`ORDER_ID`), false, true) as tanqueNafta, " .
				       "if(isnull(abrlTM.`ORDER_ID`), false, true) as tempMotor, " .
				       "if(isnull(abrlTC.`ORDER_ID`), false, true) as tempCarga " .
			   " from abmacodigos abma " .
			   " left join abrlsensores abrlP1 on (abrlP1.`ORDER_RL` = abma.`ORDER_ID` and abrlP1.`TIPO`= 6) " .
			   " left join abrlsensores abrlP2 on (abrlP2.`ORDER_RL` = abma.`ORDER_ID` and abrlP2.`TIPO`= 5) " .
			   " left join abrlsensores abrlP3 on (abrlP3.`ORDER_RL` = abma.`ORDER_ID` and abrlP3.`TIPO`= 8) " .
			   " left join abrlsensores abrlP4 on (abrlP4.`ORDER_RL` = abma.`ORDER_ID` and abrlP4.`TIPO`= 7) " .
			   " left join abrlsensores abrlP5 on (abrlP5.`ORDER_RL` = abma.`ORDER_ID` and abrlP5.`TIPO`= 9) " .
			   " left join abrlsensores abrlP6 on (abrlP6.`ORDER_RL` = abma.`ORDER_ID` and abrlP6.`TIPO`= 12) " .
			   " left join abrlsensores abrlP7 on (abrlP7.`ORDER_RL` = abma.`ORDER_ID` and abrlP7.`TIPO`= 11) " .
			   " left join abrlsensores abrlP8 on (abrlP8.`ORDER_RL` = abma.`ORDER_ID` and abrlP8.`TIPO`= 13) " .
			   " left join abrlsensores abrlLO on (abrlLO.`ORDER_RL` = abma.`ORDER_ID` and abrlLO.`TIPO`= 14) " .
			   " left join abrlsensores abrlEN on (abrlEN.`ORDER_RL` = abma.`ORDER_ID` and abrlEN.`TIPO`= 10) " .
			   " left join abrlsensores abrlCD on (abrlCD.`ORDER_RL` = abma.`ORDER_ID` and abrlCD.`TIPO`= 3) " .
			   " left join abrlsensores abrlTN on (abrlTN.`ORDER_RL` = abma.`ORDER_ID` and abrlTN.`TIPO`= 4) " .
			   " left join abrlsensores abrlTM on (abrlTM.`ORDER_RL` = abma.`ORDER_ID` and abrlTM.`TIPO`= 15) " .
			   " left join abrlsensores abrlTC on (abrlTC.`ORDER_RL` = abma.`ORDER_ID` and abrlTC.`TIPO`= 16) " .
			   " left join abrlsensores abrlPP on (abrlPP.`ORDER_RL` = abma.`ORDER_ID` and abrlPP.`TIPO`= 17) " .
			   " WHERE abma.ORDER_ID = $cuentaId";
		$LOGGER->addLine('INFO', ' CONSULTA Controla Sensores: '.$SQL);
		if (!$mysqli->real_query($SQL))	{
      		$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_ControlaSensores' " . $mysqli->error.' CONSULTA Controla Sensor digital: '.$SQL);
      		$mysqli->close();
      		return false;
    	}
		return  BykomCliente::getResultado($mysqli);
	}

	/**MEDICIONES DIGITALES*****************************************************************************************/
	function Consulta_ControlaSensorDigital($cuentaId, $sensorId) {
		global $LOGGER;
    	$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	 	if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_ControlaSensorDigital' " . mysqli_connect_error());
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
		$SQL = "select abrl.SENSOR_ID as sensorId from abrlsensores abrl WHERE abrl.TIPO = $sensorId AND abrl.ORDER_RL = " . $cuentaId;
		$LOGGER->addLine('DEBUG', ' CONSULTA Controla Sensor digital: '.$SQL);
		if (!$mysqli->real_query($SQL)){
      		$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_ControlaSensorDigital' " . $mysqli->error.' CONSULTA Controla Sensor digital: '.$SQL);
      		$mysqli->close();
      		return false;
    	}
		$resultado =  BykomCliente::getResultado($mysqli);
		$mysqli->close();
		if ($resultado->cantidad() > 0) {
			return $resultado->campo('sensorId', 0);
		}
		return -1;
	}


	function parsearSensoresDigitales($digitales) {
		if ($digitales == null) return "X";
		if ($digitales != null) {
			$digitales = str_replace("|","",$digitales);
		}
		return "X".$digitales;
	}

	/**********************************************************************/
	function Consulta_Historico_Caudalimetro2($consulta) {
		//0) inicializo variables
		$campos = array	('FECHA'=>0, 'CAMBIO_ESTADO'=>1, 'CUENTA'=>2, 'PREFIXTABLA'=>3, 'FECHA_CRUDA'=>4);
		$datos = array();
		$resultado = new cResultado($campos, $datos);
		$eventoAnterior = -1;
		$eventoActual = NULL;
		$fila = 0;
		//1) verifico y genero eventos de conexion/desconexion y viceversa
	    for($i=0;  $i < $consulta->cantidad(); $i++ ){
			//a) calculo fecha del mensaje
			//$time = strtotime($consulta->campo('FECHA', $i));//???????
			//b) verificar si hubo cambio de estado
			$eventoActual = $consulta->campo('conexionCaudalimetro', $i);
			if ($eventoAnterior == -1) {
				$eventoAnterior = $eventoActual;
				continue;
			}

			if ($eventoActual == $eventoAnterior || $eventoActual==null) {
				continue;
			}
			$fechaMensaje = strtotime($consulta->campo('fechaMensaje', $i));
			$myDate = date('d/m/Y H:i:s', $fechaMensaje);
			$resultado->setCampo('FECHA', $fila, $myDate.'');
			$resultado->setCampo('CUENTA', $fila, $consulta->campo('movil', $i));
			$resultado->setCampo('PREFIXTABLA', $fila, date('ym', $fechaMensaje));
			$resultado->setCampo('FECHA_CRUDA', $fila, $consulta->campo('fechaGMT', $i));
			if ($eventoAnterior == 0 && $eventoActual == 1 ) { //CONEXION;
				$resultado->setCampo('CAMBIO_ESTADO', $fila, 'CONEXION DE CAUDALIMETRO');
			} else { // DESCONEXION
				$resultado->setCampo('CAMBIO_ESTADO', $fila, 'DESCONEXION DE CAUDALIMETRO');
			}
			$eventoAnterior = $eventoActual;
			$fila++;
		}
 	   return $resultado;
	}

	function Consulta_Historico_Caudalimetro($consulta) {
		//0) inicializo variables
		$campos = array	('FECHA'=>0, 'CAMBIO_ESTADO'=>1, 'CUENTA'=>2, 'PREFIXTABLA'=>3, 'FECHA_CRUDA'=>4);
		$datos = array();
		$resultado = new cResultado($campos, $datos);
		$eventoAnterior = -1;
		$eventoActual = NULL;
		$fila = 0;
		//1) verifico y genero eventos de conexion/desconexion y viceversa
	    for($i=0;  $i < $consulta->cantidad(); $i++ ){
			//a) calculo fecha del mensaje
			$time = strtotime($consulta->campo('FECHA', $i));//???????
			//b) verificar si hubo cambio de estado
			$eventoActual = $consulta->campo('CAUDALIMETRO', $i);
			if ($eventoAnterior == -1) {
				$eventoAnterior = $eventoActual;
				continue;
			}

			if ($eventoActual == $eventoAnterior ) {
				continue;
			}
			$fechaMensaje = strtotime($consulta->campo('FECHA_MENSAJE', $i));
			$myDate = date('d/m/Y H:i:s', $fechaMensaje);
			$resultado->setCampo('FECHA', $fila, $myDate.'');
			$resultado->setCampo('CUENTA', $fila, $consulta->campo('ORDER_RL', $i));
			$resultado->setCampo('PREFIXTABLA', $fila, date('ym', $fechaMensaje));
			$resultado->setCampo('FECHA_CRUDA', $fila, $consulta->campo('FECHA_GMT', $i));
			if ($eventoAnterior == 0 && $eventoActual == 1 ) { //CONEXION;
				$resultado->setCampo('CAMBIO_ESTADO', $fila, 'CONEXION DE CAUDALIMETRO');
			} else { // DESCONEXION
				$resultado->setCampo('CAMBIO_ESTADO', $fila, 'DESCONEXION DE CAUDALIMETRO');
			}
			$eventoAnterior = $eventoActual;
			$fila++;
		}
 	   return $resultado;
	}
	/**********************************************************************/
    function Consulta_Posicion_Evento_Caudalimetro($cuentaId, $fecha, $tabla){
		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Posicion_Evento_Caudalimetro' " . mysqli_connect_error() );
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
		$direnenciaMinutos = "TIMESTAMPDIFF(MINUTE, tabla.FECHA_GMT,'" . $fecha . "')";
        $SQL = "SELECT tabla.ORDER_ID as historicoId, " . $direnenciaMinutos . " as presicion,
       				   tabla.LATITUD as latitud,
       				   tabla.LONGITUD as longitud,
       				   tabla.APROXIMACION as aproximacion,
       				   tabla.FECHA_MENSAJE as fechaMensaje,
       				   tabla.FECHA_GMT as fechaGMT
				FROM " . $tabla . " tabla
				WHERE tabla.ORDER_RL = " . $cuentaId .
				" AND tabla.FECHA_GMT <= '" . $fecha ."'".
				" AND ABS(" . $direnenciaMinutos . ") <= 30
				ORDER BY ABS(" . $direnenciaMinutos . ") ASC, tabla.FECHA_GMT DESC";
		$LOGGER->addLine('DEBUG', 'CONSULTA APROXIMACION: '.$SQL);
        if (!$mysqli->real_query($SQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'Consulta_Posicion_Evento_Caudalimetro' " . $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
    /**********************************************************************/

    function VerificaRegla($identificador,$tipoRegla){
    	global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'VerificaRegla' " . mysqli_connect_error() );
            printf("Conexion fallida: %s\n", mysqli_connect_error());
            exit();
        }
        $SQL = "SELECT id FROM regla WHERE poligonoFK IN ($identificador) AND tipoRegla = $tipoRegla";
        if (!$mysqli->real_query($SQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'VerificaRegla' " . $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }

    function detalleRecorrido($cuentas,$fechaIni,$fechafin,$inicio,$cantReg){
   		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'detalleRecorrido' " . mysqli_connect_error() );
            printf("Conexion fallida: %s\n", mysqli_connect_error());
            exit();
        }
    	$vFecha  = explode("-",$fechaIni);
    	$mesIni  = $vFecha[1];
    	$anioIni = $vFecha[0];
    	$vFechaFin  = explode("-",$fechafin);
    	$mesFin  = $vFechaFin[1];
    	$anioFin = $vFechaFin[0];
		$UNION 	= "";
		$querySQL 	= "";
		$sigo  	= true;

		while( $sigo ){
			$anio 	= substr($anioIni,-2);
			$sMesIni = $mesIni;
			if(strlen($mesIni)==1){
				$sMesIni = "0".$mesIni;
			}
			$nombreTablaAvl = "historico_avl_" . $anio . $sMesIni;
			$nombreTablaMed = "historico_med_" . $anio . $sMesIni;

			$querySQL .= $UNION;
			$querySQL .= " select
						hist.`ORDER_ID` as id,
						tlma.nombre_mix as nombreFlota,
						abma.nombre as nombre,
						abma.nombre_dos as nombreDos,
						hist.`ORDER_RL` as movil,
						hist.`FECHA_MENSAJE` as fechaMensaje,
						hist.`EVENTO` as evento,
						hist.`APROXIMACION` as aproximacion,
						hist.`LATITUD` as lat,
						hist.`LONGITUD` as lon,
						hist.`VELOCIDAD` as velocidad,
						hist.`SENTIDO` as sentido,
						hist.`EDAD_MENSAJE` as edadMensaje,
						hist.`FECHA_GMT` as fechaGMT,
						medCaudalimetro.`TIPO_SENSOR` as sensor ,
						medCaudalimetro.`VALOR1` as consumoTotal,
						medCaudalimetro.`VALOR2` as consumoActual,
						medCaudalimetro.`VALOR3` as tiempoEnMarcha,
						medTemperaturaMotor.`VALOR1` as tempMotor,
						medTemperaturaCarga.`VALOR1` as tempCarga,
						alma.`CODIGOALFA` as eventoCodigo,
						alma.`NOMBRE` as eventoNombre,
						hist.`ALIMENTACION` as alimentacion,
						hist.`CONTACTO` as contactoMotor,
						hist.`ODOMETRO_TOTAL` as odometroTotal,
						hist.`CAUDALIMETRO` as conexionCaudalimetro,
						abrlCaudalimetro.ORDER_ID as controlaCaudalimetro
						FROM bykom_avl.$nombreTablaAvl hist
						JOIN wc.abmacodigos abma ON abma.ORDER_ID = hist.ORDER_RL
						LEFT JOIN wc.almacodigos alma ON alma.`CODIGOALFA` = hist.`CODIGOALFA`
						LEFT JOIN wc.abrlsensores abrlCaudalimetro on (abrlCaudalimetro.ORDER_RL = abma.ORDER_ID AND abrlCaudalimetro.TIPO = 3)
						LEFT JOIN wc.tlmapersonas tlma ON tlma.ORDER_ID = abma.FLOTA_ID
						LEFT JOIN bykom_avl.$nombreTablaMed medCaudalimetro on medCaudalimetro.`HIST_RL` = hist.`ORDER_ID` and medCaudalimetro.TIPO_SENSOR = 3
						LEFT JOIN bykom_avl.$nombreTablaMed medTemperaturaMotor on medTemperaturaMotor.`HIST_RL` = hist.`ORDER_ID` and medTemperaturaMotor.TIPO_SENSOR = 15
						LEFT JOIN bykom_avl.$nombreTablaMed medTemperaturaCarga on medTemperaturaCarga.`HIST_RL` = hist.`ORDER_ID` and medTemperaturaCarga.TIPO_SENSOR = 16
						WHERE hist.ORDER_RL IN ($cuentas)
						AND hist.FECHA_MENSAJE BETWEEN  '$fechaIni'  AND '$fechafin' ";

			if($mesIni == $mesFin && $anioIni == $anioFin){
				$sigo = false;
			}
			$mesIni++;
			if ($mesIni == 13){
				$mesIni = 1;
				$anioIni++;
			}
			$UNION = " UNION ";
    	}

		$querySQL .= " ORDER BY nombreFlota, movil, fechaGMT ASC";
		if($cantReg!=""){
			$querySQL .= " LIMIT $inicio, $cantReg";
		}
		$LOGGER->addLine('ERROR', "aaaa:".$querySQL);
		ini_set('memory_limit','1024M');
		if (!$mysqli->real_query($querySQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'detalleRecorrido' " . $mysqli->error.' CONSULTA: '.$querySQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
 function detalleRecorridoContar($cuentas,$fechaIni,$fechafin,$inicio,$cantReg){
   		global $LOGGER;
	    $mysqli = new mysqli(HOST_AVL, USER_AVL, PASSWORD_AVL, DB_AVL, PORT_AVL);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'detalleRecorridoContar' " . mysqli_connect_error());
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }
    	$vFecha  = explode("-",$fechaIni);
    	$mesIni  = $vFecha[1];
    	$anioIni = $vFecha[0];
    	$vFechaFin  = explode("-",$fechafin);
    	$mesFin  = $vFechaFin[1];
    	$anioFin = $vFechaFin[0];
		$UNION 	= "";
		$querySQL 	= "";
		$sigo  	= true;

		while( $sigo ){
			$anio 	= substr($anioIni,-2);
			$sMesIni = $mesIni;
			if(strlen($mesIni)==1){
				$sMesIni = "0".$mesIni;
			}
			$nombreTablaAvl = "historico_avl_" . $anio . $sMesIni;
			$nombreTablaMed = "historico_med_" . $anio . $sMesIni;

			$querySQL .= $UNION;
			$querySQL .= " select
						 COUNT(*) as cantidadRegistros
						FROM bykom_avl.$nombreTablaAvl hist
						JOIN wc.abmacodigos abma ON abma.ORDER_ID = hist.ORDER_RL
						LEFT JOIN wc.almacodigos alma ON alma.ORDER_ID = hist.EVENTO
						LEFT JOIN wc.tlmapersonas tlma ON tlma.ORDER_ID = abma.FLOTA_ID
						LEFT JOIN bykom_avl.$nombreTablaMed medCaudalimetro on medCaudalimetro.`HIST_RL` = hist.`ORDER_ID` and medCaudalimetro.TIPO_SENSOR = 3
						LEFT JOIN bykom_avl.$nombreTablaMed medTemperaturaMotor on medTemperaturaMotor.`HIST_RL` = hist.`ORDER_ID` and medTemperaturaMotor.TIPO_SENSOR = 15
						LEFT JOIN bykom_avl.$nombreTablaMed medTemperaturaCarga on medTemperaturaCarga.`HIST_RL` = hist.`ORDER_ID` and medTemperaturaCarga.TIPO_SENSOR = 16
						WHERE hist.ORDER_RL IN ($cuentas)
						AND hist.FECHA_MENSAJE BETWEEN  '$fechaIni'  AND '$fechafin' ";

			if($mesIni == $mesFin && $anioIni == $anioFin){
				$sigo = false;
			}
			$mesIni++;
			if ($mesIni == 13){
				$mesIni = 1;
				$anioIni++;
			}
			$UNION = " UNION ";
    	}

		if($cantReg!=""){
			$querySQL .= " LIMIT $inicio, $cantReg";
		}
		if (!$mysqli->real_query($querySQL)){
           $LOGGER->addLine('ERROR',"FUNCION: 'detalleRecorridoContar' " . $mysqli->error.' CONSULTA: '.$querySQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
  /**********************************************************************/
    /*
     * Dado un array de puntos devuelve la distancia total recorrida
     */
    function CalculaDistanciaTotal($listadoPuntos) {
      $result = 0;
      if (count($listadoPuntos) > 1){
      	$R = 6371;
      	$totalPuntos = 1;
	  	$last = 0;
	  	$auxi = "";
		while ($last < count($listadoPuntos) && ($listadoPuntos[$last]->lat == '0' || $listadoPuntos[$last]->lon == '0'
				|| $listadoPuntos[$last]->edadMensaje>=255 || $listadoPuntos[$last]->edadMensaje < 0)){
				$last++;
		}

      	for($i=$last; $i<count($listadoPuntos); $i++){
			if ($listadoPuntos[$i]->lat == '0' || $listadoPuntos[$i]->lon == '0'
				|| $listadoPuntos[$i]->edadMensaje >= 255 || $listadoPuntos[$i]->edadMensaje < 0 ){
				continue;
			}
      		$lat1 = quitCero($listadoPuntos[$last]->lat);
      		$lon1 = quitCero($listadoPuntos[$last]->lon);
   			$lat2 = quitCero($listadoPuntos[$i]->lat);
   			$lon2 = quitCero($listadoPuntos[$i]->lon);
      		/*Curvatura*/
      		$dLat = ($lat1-$lat2) * (pi() / 180);
      		$dLon = ($lon1-$lon2) * (pi() / 180);
      		$a = pow(sin($dLat/2),2) + cos($lat1 * pi()/180) * cos($lat2 * pi()/180) *
      		 	 pow(sin($dLon/2),2);
      		$c = 2 * atan2(sqrt($a), sqrt(1-$a));
      		$aux = $R * $c;
      		$result = $result + $aux;
      		$last = $i;
      		$totalPuntos++;

      	}
      }
      $result = round($result, 3);
      $resultString = (string) $result;
      $resultString = str_ireplace(".", ",", $resultString);
      return $resultString;
    }

	function cuentaHabilitada($loginClass) {
		global $LOGGER;
		$loginClassActual = $loginClass;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR',"FUNCION: 'cuentaHabilitada' " . mysqli_connect_error());
     		$loginClassActual->errorCode = 1;
       		return  $loginClassActual;
     	}
		$SQL = 	" SELECT abma.ORDER_ID as cuentaFk, abma.objetivo as objetivo ".
			   	" FROM abmacodigos abma "	.
			   	" INNER JOIN rcmacodigos rc on (rc.ORDER_ID = abma.ID_RC) " .
               	" WHERE rc.CODIGOALFA = '" 	. $loginClassActual->codigorc . "'" .
               	" AND abma.ID_CL = '" 		. $loginClassActual->codigocuenta . "'" .
               	" AND abma.PARTICION = " 	. $loginClassActual->particion .
               	" AND abma.OBJETIVO = "		. $loginClassActual->objetivo .
				" AND (abma.LOCKSTAT = 1 AND abma.LOCKDATE <= NOW() )"	;

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'cuentaHabilitada' " . $mysqli->error.' CONSULTA: '.$SQL);
      	 	$loginClassActual->errorCode = 2;
       		return  $loginClassActual;
     	}
     	$resultado = BykomCliente::getResultado($mysqli);
     	if ($resultado->cantidad() > 0){
     		$loginClassActual->errorCode = 52;
       		return  $loginClassActual;
     	}
		return $loginClassActual;
	}
	function fechaAnteriorA($f1,$f2){
		$fecha_ini 	= strtotime($f1);//ej: 10/11/2000
		$fecha_fin	= strtotime($f2);//ej: 20/12/2000
		if($fecha_ini < $fecha_fin){
			return true;
		}else{
			return false;
		}
	}

	function valueByFieldTable($field,$table,$id){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()) {
			$LOGGER->addLine('ERROR',"FUNCION: 'valueByFieldTable' " . mysqli_connect_error());
			return false;
     	}
		$WHERE = "";
     	if($id!=""){
     		$WHERE = " WHERE ORDER_ID = $id ";
     	}
		$SQL = 	"SELECT `$field`
			   	FROM `$table` $WHERE ";

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'valueByFieldTable' " . $mysqli->error.' CONSULTA: '.$SQL);
       		return  false;
     	}
     	return BykomCliente::getResultado($mysqli);
	}

	function getHoursFromZoneGMT($table,$id){
		global $LOGGER;
		$mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     	if (mysqli_connect_errno()){
			$LOGGER->addLine('ERROR',"FUNCION: 'getHoursFromZoneGMT' " . mysqli_connect_error());
			return false;
     	}
		$WHERE = "";
     	if($id!=""){
     		$WHERE = " WHERE t.ORDER_ID = '$id' ";
     	}
		$SQL = 	"SELECT
					tima.`HORAS` as horas,
		      		tima.`TIPO` as tipo,
		       		t.timeZoneId as timeZone
				FROM `timazonesids` tima
		 		JOIN `$table` t ON tima.`ORDER_ID` = t.`timezoneid`
			   	$WHERE ";

		if (!$mysqli->real_query($SQL)) {
			$LOGGER->addLine('ERROR',"FUNCION: 'getHoursFromZoneGMT' " . $mysqli->error.' CONSULTA: '.$SQL);
       		return  false;
     	}
     	return BykomCliente::getResultado($mysqli);
	}

	function  getLabelZonaHoraria($minutos, $signo) {
		$resultado = "GMT";
		switch($signo){
			case 1: $resultado = $resultado . "-"; break;
			case 2: $resultado = $resultado . "+"; break;
		}

		$desfazaje = round($minutos / 60,1);

		$resultado = $resultado . $desfazaje;

		return $resultado;
	}

	// FUNCIONES PARA RUTAS!!!!!
	/**********************************************************************/
	function getMisRutas($cuentaId, $objetivo){
	 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'getMisRutas' " . mysqli_connect_error());
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	     }
	      $SQL = "SELECT `id`,
	      				`nombre`,
	      				`descripcion`,
	      				`color`,
	      				`cuentaId`,
	      				`objetivo`
			      FROM `rutas`
			      WHERE `cuentaId` = $cuentaId AND `objetivo`= $objetivo
			      ORDER BY id ";
	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'getMisRutas' " . $mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
	     return BykomCliente::getResultado($mysqli);
    }
 	/**
 	 * Dada una ruta,
 	 * Retorna todos los puntos de la misma
 	 */
	function misPuntosRutas($rutaId){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'misPuntosRutas' " .  mysqli_connect_error());
	       printf("Conexion fallida: %s\n", mysqli_connect_error());
	       exit();
	     }
	     $SQL = " select * from `rutas_puntos` where `rutaFk`= $rutaId ORDER BY id";

	     if (!$mysqli->real_query($SQL)){
	       $LOGGER->addLine('ERROR',"FUNCION: 'misPuntosRutas' " . $mysqli->error.' CONSULTA: '.$SQL);
	       exit();
	     }
	     return BykomCliente::getResultado($mysqli);
    }
/**********************************************************************/
     //persiste un objeto del tipo "MisRutas" en la base de datos y lo retorna con el nuevo ID o bien con un -1 como id
     //si es que fallo al intentar realizar la operacion
	 function PersistirRuta($Ruta){
		 global $LOGGER;
		 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
	     if (mysqli_connect_errno()){
	     	$LOGGER->addLine('ERROR',"FUNCION: 'PersistirRuta' " . mysqli_connect_errno() );
		   	$Ruta->id=-1;
	       	return ($Ruta);
	     }
		 //POMAPOLIGONOS
		 $SQL = "";
		 $colorDec = hexdec($Ruta->color); //convertimos el color de HEXA a DECIMAL
		 if (($Ruta->id=='')||($Ruta->id==null)){ //ES UN INSERT
			//inserto en rutas
		 	$SQL = "INSERT INTO `rutas` (`nombre`, `descripcion`, `color`, `cuentaId`, `objetivo`) ";
			$SQL .= "VALUES ('$Ruta->nombre', '$Ruta->descripcion', $colorDec, $Ruta->cuentaId, $Ruta->objetivo);";
		 }else{
		 	$SQL = "UPDATE `rutas` SET ";
			$SQL .= "rutas.`nombre`='$Ruta->nombre', ";
			$SQL .= "rutas.`descripcion`='$Ruta->descripcion', ";
			$SQL .= "rutas.`color`=$colorDec ";
			$SQL .= " WHERE rutas.`id` = $Ruta->id";
		 }


		 //EJECUTO EL PRIMER QUERY
		 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
	     if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRuta' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       $Ruta->id=-1;
	       return ($Ruta);
	     }
		 if (($Ruta->id=='')||($Ruta->id==null)) //fue un insert
		 	$Ruta->id=$mysqli->insert_id;

		 //rutas_puntos
		 $SQL = "DELETE FROM `rutas_puntos` WHERE rutas_puntos.`rutaFk`=$Ruta->id";
		 if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRuta' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       $Ruta->id=-1;
	       return ($Ruta);
	     }
		 $SQL = "INSERT INTO `rutas_puntos` (`rutaFk`, `latitud`, `longitud`) VALUES ";
		 for ($i=0; $i<$Ruta->cantidadPuntos(); $i++){
		    $lat = $Ruta->PUNTOSLAT[$i];
			$lng = $Ruta->PUNTOSLNG[$i];
			$SQL .= "($Ruta->id, '$lat', '$lng')";
			if ($i<$Ruta->cantidadPuntos()-1)
				$SQL.=",";
			}
		 $SQL.=";";
		 if (!$mysqli->real_query($SQL)){
		   $LOGGER->addLine('ERROR',"FUNCION: 'PersistirRuta' " . $mysqli->error.' CONSULTA: '.$SQL);
		   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
	       $Ruta->id=-1;
	       return ($Ruta);
	     }

		 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA => PERSISTO LOS CAMBIOS
		 $mysqli->close();
	     return ($Ruta);
    }

	/**************************************************************************************************/
	 function EliminarRutas($Ids,$cuentaId,$objetivo) //elimina todas las rutas de la base de datos que esten en el array de Ids y retorna True en caso de exito
	{
	 global $LOGGER;
	 $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
     if (mysqli_connect_errno()) {
     	$LOGGER->addLine('ERROR',"FUNCION: 'EliminarRutas' " . mysqli_connect_errno() );
        return (false);
     }
	 if (($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM rutas_puntos WHERE rutas_puntos.`rutaFk` IN  (".implode(',',$Ids).")";
	 }
	 $mysqli->real_query("BEGIN"); //INICIALIZO LA TRANSACCION
     if (!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarRutas' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }
	 if(($Ids!=null)and($Ids!='')){
	 	$SQL = "DELETE FROM rutas WHERE rutas.`id` IN  (".implode(',',$Ids).")";
	 }
	 if(!$mysqli->real_query($SQL)){
	   $LOGGER->addLine('ERROR',"FUNCION: 'EliminarRutas' " . $mysqli->error.' CONSULTA: '.$SQL);
	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
       return (false);
     }

//	 if(($Ids!=null)and($Ids!='')){
//	 	$SQL = "DELETE FROM zonas_visibles WHERE `ZONA_ID` IN  (".implode(',',$Ids).")";
//	 }
//	 if(!$mysqli->real_query($SQL)){
//	   $LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQL);
//	   $mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
//       return (false);
//     }
//
//	 if($cuentaId!=null && $cuentaId!=""){
//		$SQLDel = "DELETE FROM `mapa_zonas` WHERE `cuentaId`=$cuentaId AND `objetivo`= $objetivo AND zonaId IN  (".implode(',',$Ids).") ";
//		if (!$mysqli->real_query($SQLDel)){
//			$LOGGER->addLine('ERROR', $mysqli->error.' CONSULTA: '.$SQLDel);
//		   	$mysqli->real_query("ROLLBACK");//DESHAGO LOS CAMBIOS
//	       	return (false);
//	    }
//     }

	 $mysqli->real_query("COMMIT");	//LA TRANSACCION FUE EXITOSA=>PERSISTO LOS CAMBIOS
	 $mysqli->close();
     return (true);
    }
   function consultaTiempoKillMonitor(){
		global $LOGGER;
	    $mysqli = new mysqli(HOST, USER, PASSWORD, DB, PORT);
        if (mysqli_connect_errno()){
        	$LOGGER->addLine('ERROR',"FUNCION: 'consultaTiempoKillMonitor' " . mysqli_connect_error());
           	printf("Conexion fallida: %s\n", mysqli_connect_error());
           	exit();
        }

        $SQL = "select timeKillMonitor from `wcconfig` limit 1 ";
        if (!$mysqli->real_query($SQL)) {
           $LOGGER->addLine('ERROR',"FUNCION: 'consultaTiempoKillMonitor' " . $mysqli->error.' CONSULTA: '.$SQL);
           exit();
        }
        return BykomCliente::getResultado($mysqli);
    }
}
?>